`
月亮不懂夜的黑
  • 浏览: 154180 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java处理office文档与pdf文件(二)

阅读更多

该部分主要内容:文件上传,以及office文件和pdf的html处理,以及提取text

// 根据服务器的文件保存地址和原文件名创建目录文件全路径
		File file = this.getFile();
		String url = "";
		String tempFile = "";
		String fileFolder = "";	//上传文件路径
		String hz = "";
		String oldOrgFileId = null;
		Long oldId = knowledge.getZsk_zskID();
		if(null != oldId && 0 != oldId){
			oldOrgFileId = knowledge.getOrgFileId();
		}
		
		if(null != file){
			// 截取扩展名
			hz = fileFileName.substring(fileFileName.lastIndexOf("."),fileFileName.length());
			String zskCode = knowledge.getZsk_Code();
			fileFolder = createNewFile(this.savePath,zskCode);
			// 上传的文件在服务器中的全路径
			url = fileFolder + "\\" + fileFileName;
			//1、文件上传
			FileUtils.copyFile(file, new File(url));	
			
			//2、文件转化为html
			tempFile = createNewFile(this.tempPath,zskCode);
			String htmlStr = "";
			if(hz.equals(".pdf")){
				htmlStr = "<html><body>" +
				"<embed src='"+fileFileName+"' width='100%' height='100%'></embed>" +
				"</body></html>";
			}else{
				String dstHtml = tempFile+"\\"+zskCode+".html";
				//删除文件夹下所有文件及子文件夹
				FileUtil.deleteChildFile(new File(tempFile));
				
				changeDocToHtml(hz, url, dstHtml);
				htmlStr = FileUtil.htmlToStr(dstHtml);
			}
			knowledge.setContentHtml(htmlStr);
			Clob htmlColb=Hibernate.createClob(htmlStr);
			knowledge.setZsk_Description(htmlColb);
			
			//3、获取上传文件对应的文本内容
			String docContent = findDocContent(hz, url);
			knowledge.setContentText(docContent);
			Clob docContentClob=Hibernate.createClob(docContent);
			knowledge.setZsk_Text(docContentClob);
			
			String orgFileId = new GUID().toString();	//知识库原文件对应的标识
			knowledge.setOrgFileId(orgFileId);
			knowledge.setZsk_ContentType(1);
		}else{
			Clob htmlColb = Hibernate.createClob(htmlArea);
			Clob textClob = Hibernate.createClob(htmlArea.replaceAll("</?[^>]+>", ""));
			knowledge.setZsk_Description(htmlColb);
			knowledge.setContentHtml(htmlArea);
			knowledge.setZsk_Text(textClob);
			knowledge.setContentText(htmlArea);
			knowledge.setZsk_ContentType(2);
		}
		
		//添加时处理
		if(null == oldId || 0 ==  oldId){
			//to--do  需要在后期重新处理 当前用户
			if(null == knowledge.getZsk_Author() || "".equals(knowledge.getZsk_Author())){	//当前用户
				knowledge.setZsk_Author(SessionUtil.getTSysAgent().getCagentname());
			}
			knowledge.setZsk_RegisterTime(new Date());
		}
		//to---do 
		knowledge.setZsk_LastMender(1L);
		knowledge.setZsk_ModifyTime(new Date());
		
		KnowLedgeOtherContion ko = new KnowLedgeOtherContion();
		ko.setFileContentType(fileContentType);
		ko.setFileFileName(fileFileName);
		ko.setOldId(oldId);
		ko.setTempFile(tempFile);
		ko.setUrl(url);
		ko.setOldOrgFileId(oldOrgFileId);
		
		knowUploadServiceImp.saveOrUpdateKnowledge(knowledge,ko);

 将office转化为html

/**
	 * 将word,excel,ppt,pdf转化为html
	 * @param hz
	 * @param url
	 * @param dstHtml
	 */
	private void changeDocToHtml(String hz, String url, String dstHtml) {
		if("pdf".equalsIgnoreCase(hz)){
			
		}else if(".xls".equalsIgnoreCase(hz) || ".xlsx".equalsIgnoreCase(hz)){
			DocToHtml.getInstance().ExceltoHtml(url,dstHtml);
		}else if(".doc".equalsIgnoreCase(hz) || ".docx".equalsIgnoreCase(hz)){
			DocToHtml.getInstance().WordtoHtml(url,dstHtml);
		}else if(".ppt".equalsIgnoreCase(hz) || ".pptx".equalsIgnoreCase(hz)){
			DocToHtml.getInstance().PPTtoHtml(url, dstHtml);
		}
	}

 将word,wxcel,ppt另存为html的方法

public boolean WordtoHtml(String srcFile, String dstFile) {
		ComThread.InitSTA();
		ActiveXComponent activexcomponent = new ActiveXComponent("Word.Application");
		String s2 = srcFile;
		String s3 = dstFile;
		boolean flag = false;
		try {
			activexcomponent.setProperty("Visible", new Variant(false));
			Dispatch dispatch = activexcomponent.getProperty("Documents").toDispatch();
			Dispatch dispatch1 = Dispatch.invoke(dispatch, "Open", 1,
					new Object[] { s2, new Variant(false), new Variant(true) },
					new int[1]).toDispatch();
			Dispatch.invoke(dispatch1, "SaveAs", 1, new Object[] { s3,new Variant(8) }, new int[1]);
			Variant variant = new Variant(false);
			Dispatch.call(dispatch1, "Close", variant);
			flag = true;
		} catch (Exception exception) {
			log.error("word转化为html出错-->"+exception.getMessage());
		} finally {
			activexcomponent.invoke("Quit", new Variant[0]);
			ComThread.Release();
			ComThread.quitMainSTA();
		}
		return flag;
	}

	public boolean PPTtoHtml(String srcFile, String dstFile) {
		ComThread.InitSTA();
		ActiveXComponent activexcomponent = new ActiveXComponent( "PowerPoint.Application");
		boolean flag = false;
		try {
			Dispatch dispatch = activexcomponent.getProperty("Presentations")
					.toDispatch();
			Dispatch dispatch1 = Dispatch.call(dispatch, "Open", srcFile,
					new Variant(-1), new Variant(-1), new Variant(0))
					.toDispatch();
			Dispatch.call(dispatch1, "SaveAs", dstFile, new Variant(12));
//			Variant variant = new Variant(-1);
			Dispatch.call(dispatch1, "Close");
			flag = true;
		} catch (Exception exception) {
			log.error("ppt转化为html出错-->"+exception.getMessage());
		} finally {
			activexcomponent.invoke("Quit", new Variant[0]);
			ComThread.Release();
			ComThread.quitMainSTA();
		}
		return flag;
	}

	public boolean ExceltoHtml(String s, String s1) {
		 ComThread.InitSTA();
		 ActiveXComponent activexcomponent = new
		 ActiveXComponent("Excel.Application");
		 boolean flag = false;
		 try
		 {
			 activexcomponent.setProperty("Visible", new Variant(false));
			 Dispatch dispatch = activexcomponent.getProperty("Workbooks").toDispatch();
			 Dispatch dispatch1 = Dispatch.invoke(dispatch, "Open", 1, new Object[] {
					 s, new Variant(false), new Variant(true)}, new int[1]).toDispatch();
			 Dispatch.call(dispatch1, "SaveAs", s1, new Variant(44));
			 Variant variant = new Variant(false);
			 Dispatch.call(dispatch1, "Close", variant);
			 flag = true;
		 }catch(Exception exception){
			 log.error("excel转化为html出错-->"+exception.getMessage());
		 }finally{
			 activexcomponent.invoke("Quit", new Variant[0]);
			 ComThread.Release();
			 ComThread.quitMainSTA();
		 }
		 return flag;
	}

 获取office文件以及pdf的文本内容

private String findDocContent(String hz, String url) {
		String docContent = null;
		File file = new File(url);
		if(".pdf".equalsIgnoreCase(hz)){
			docContent = GetDocText.getDocTextInta().getTextFromPdf(file);
		}else if(".xls".equalsIgnoreCase(hz) || ".xlsx".equalsIgnoreCase(hz)){
			docContent = GetDocText.getDocTextInta().getTextFromExcel(file);
		}else if(".doc".equalsIgnoreCase(hz) || ".docx".equalsIgnoreCase(hz)){
			docContent = GetDocText.getDocTextInta().getTextFromWord(file);
		}else if(".ppt".equalsIgnoreCase(hz) || ".pptx".equalsIgnoreCase(hz)){
			docContent = GetDocText.getDocTextInta().getTextFromPPT(file);
		}
		return docContent;
	}

 具体的实现方法

/**
	 * 从word文件获取文本内容
	 * 
	 * @param wordFile
	 * @return word文件的文本内容
	 */
	public String getTextFromWord(File wordFile) {
		String wordText = "";
		InputStream is = null;
		try {  
            //word 2003: 图片不会被读取  
            is = new FileInputStream(wordFile);
            String fileName = wordFile.getName();
		    String hz = fileName.substring(fileName.lastIndexOf("."),fileName.length());
		    if(".doc".equals(hz)){
		    	WordExtractor ex = new WordExtractor(is);  
		    	wordText = ex.getText();
		    }else{
		    	OPCPackage opcPackage = POIXMLDocument.openPackage(wordFile.getAbsolutePath());
		    	POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage);  
		    	wordText = extractor.getText();
		    }
              
        } catch (Exception e) {  
            e.printStackTrace();  
        }finally{
        	if(is != null){
        		try {
					is.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
        	}
        }
		return wordText;
	}

	/**
	 * 从excel获取文本内容
	 * 
	 * @param excelFile
	 * @return Excel文件的文本内容
	 */
	public String getTextFromExcel(File excelFile) {
		String text = "";
		InputStream in = null;
		try {
			//创建相关的文件流对象
			in = new FileInputStream(excelFile);
		    //声明相关的工作薄对象
			Workbook wb =null;
		    //声明相关的excel抽取对象
		    ExcelExtractor extractor=null;
		    String fileName = excelFile.getName();
		    String hz = fileName.substring(fileName.lastIndexOf("."),fileName.length());
		    
		    if(hz.equals(".xls"))//针对2003版本
		    {
		    	//创建excel2003的文件文本抽取对象
		    	wb=new HSSFWorkbook(new POIFSFileSystem(in));
		    	extractor =new org.apache.poi.hssf.extractor.ExcelExtractor((HSSFWorkbook)wb);
		    }else{ //针对2007版本
		    	wb = new  XSSFWorkbook(in);
		    	//创建excel2007的文件文本抽取对象
		    	extractor =new XSSFExcelExtractor((XSSFWorkbook)wb);
		    }
		    
		    extractor.setFormulasNotResults(false);
		    //是否抽象sheet页的名称
		    extractor.setIncludeSheetNames(true);
		    //是否抽取cell的注释内容
		    extractor.setIncludeCellComments(true);
		    //获取相关的抽取文本信息
		    text = extractor.getText();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(in != null){
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
		return text;
	}
	/**
	 * 从ppt获取文本内容
	 * 
	 * @param pptFile
	 * @return ppt文件的文本内容
	 */
	public String getTextFromPPT(File pptFile){
		String pptText = null;
		FileInputStream fin = null;
		try {
			fin = new FileInputStream(pptFile);
			String fileName = pptFile.getName();
			String hz = fileName.substring(fileName.lastIndexOf("."),fileName.length());
			if(".ppt".equals(hz)){
				QuickButCruddyTextExtractor qct = new QuickButCruddyTextExtractor(fin);
				pptText = qct.getTextAsString();
			}else{
				OPCPackage opcPackage = POIXMLDocument.openPackage(pptFile.getAbsolutePath());
				XSLFPowerPointExtractor pptExtractor = new XSLFPowerPointExtractor(opcPackage);
				pptText = pptExtractor.getText();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (XmlException e) {
			e.printStackTrace();
		} catch (OpenXML4JException e) {
			e.printStackTrace();
		}finally{
			if(null != fin){
				try {
					fin.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return pptText;
	}
	/**
	 * 从pdf文件获取文本内容
	 * 
	 * @param pdfFile
	 * @return pdf文件的文本内容
	 */
	public String getTextFromPdf(File pdfFile){
		String result = null;
		FileInputStream is = null;
		PDDocument document = null;
		try{
			is = new FileInputStream(pdfFile);
			PDFParser parser = new PDFParser(is);
			parser.parse();
			document = parser.getPDDocument();
			PDFTextStripper stripper = new PDFTextStripper();
			result = stripper.getText(document);
		}catch(FileNotFoundException e){
			e.printStackTrace();
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			if(is != null){
				try{
					is.close();
				}catch(IOException e){
					e.printStackTrace();
				}
			}
			if(document != null){
				try{
					document.close();
				}catch(IOException ex){
					ex.printStackTrace();
				}
			}
		}
		return result;
	}
	/**
	 * 
	 * @param txtFile
	 * @return  返回txt的内容
	 */
	public String getTextFromTxt(File txtFile){
		FileReader fr;
		StringBuffer buff = new StringBuffer();
		try {
			fr = new FileReader(txtFile);
			BufferedReader br = new BufferedReader(fr);
			String temp = null;
			while((temp = br.readLine()) != null){
				buff.append(temp + "\r\n"); 
			}
			br.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		return buff.toString();
	}

 对带有clob字段的实体save时,直接调用hibernate的save即可。ojdbc14.jar。

更新时的处理  如下:

public void updateKnowledge(Knowledge knowledge) {
		 try {
		    knowledge.setZsk_Description(Hibernate.createClob(" "));
		    knowledge.setZsk_Text(Hibernate.createClob(" "));
		    update(knowledge);
		    flush();
		    
		    getSession().refresh(knowledge, LockMode.UPGRADE);
		    
		    SerializableClob htmlSc=(SerializableClob)knowledge.getZsk_Description();
		    SerializableClob textSc=(SerializableClob)knowledge.getZsk_Text();
		    Clob htmlWrapclob=htmlSc.getWrappedClob();
		    Clob textWrapclob=textSc.getWrappedClob();
		    CLOB htmlClob2=(CLOB)htmlWrapclob;
		    CLOB textClob2=(CLOB)textWrapclob;
		    Writer htmlWriter=htmlClob2.getCharacterOutputStream();
		    htmlWriter.write(knowledge.getContentHtml());
		    htmlWriter.close();
		    
		    Writer textWriter=textClob2.getCharacterOutputStream();
		    textWriter.write(knowledge.getContentText());
		    textWriter.close();
		    
		    update(knowledge);
		  } catch (RuntimeException re) {
		    throw re;
		  } catch (SQLException e) {
		    e.printStackTrace();
		  } catch (IOException e) {
		    e.printStackTrace();
		  }
	}

 上面几步做完,基本可以完成上传以及存入数据库,以及对带有clob文件的更新。

需要的环境  windows,jacob-1.17-M2-x64 具体的jacob下载和配置 参照网络。poi-3.9

2
3
分享到:
评论

相关推荐

    java将office文档pdf文档转换成swf文件在线预览

    因此,如何将常见的Office文档和PDF文件转换为适合Web展示的格式成为了一个关键问题。 #### 二、关键技术介绍——Java结合OpenOffice与SWFTools实现文档转换 ##### 1. 安装OpenOffice.org OpenOffice.org 是一套由...

    java实现office、wps转pdf,pdf转word

    标题“java实现office、wps转pdf,pdf转word”指的是利用Java编程来实现在不同办公文档格式间的转换,特别是从Microsoft Office和WPS格式转换为PDF,以及从PDF反向转换为Word文档。 首先,让我们讨论从Office和WPS...

    java 将office文件转换为pdf格式的文件

    Java作为一种强大的编程语言,提供了丰富的库和工具来实现各种文件格式之间的转换,包括将Office文件(如Word、Excel、PowerPoint)转换为PDF格式。这个过程涉及到的技术点主要包括文件读取、内容解析以及格式转换。...

    office文档转pdf显示

    "Office文档转PDF显示"这个主题涉及到的技术点是利用特定的库或者工具,将Microsoft Office创建的文件(如Word文档、Excel电子表格和PowerPoint演示文稿)转换成PDF格式。在给定的描述中,提到了一个名为"Aspose ...

    Java实现web在线预览office文档与pdf文档实例

    在IT行业中,尤其是在Web开发领域,用户经常需要预览上传的Office文档(如Word、Excel、PowerPoint)和PDF文件,而无需下载到本地。为了满足这种需求,开发者需要掌握如何在Web环境中实现在线预览的技术。本实例将...

    java office转pdf工具类

    综上所述,使用Aspose for Java,你可以轻松地将Office文档转换为PDF,但需要正确配置jar包依赖,处理认证文件,并根据项目需求选择合适的转换策略。记得定期更新Aspose库以获取最新的特性和修复。

    Java使用open office实现各种文档转pdf

    3. **定义转换逻辑**:创建一个方法,接收源文件路径和目标PDF文件路径作为参数。然后,使用`JODConverter`的转换方法,将源文件转换为PDF。 ```java import org.jodconverter.LocalConverter; import org....

    Java实现web在线预览office文档

    在IT行业中,尤其是在Web开发领域,常常需要处理用户上传的各种文档,其中尤以Office文档(如Word、Excel、PowerPoint)和PDF文档最为常见。Java作为广泛应用的后端开发语言,提供了解决这一问题的多种方案。本篇将...

    java将office文档pdf文档转换成swf文件在线预览.doc

    java将office文档pdf文档转换成swf文件在线预览

    java读取office文档demo

    在Java编程环境中,读取Office文档是一项常见的任务,特别是在数据处理和自动化办公场景下。本示例Demo专注于演示如何使用Java来读取不同类型的Office文档,包括Excel、Word、PDF和PowerPoint。以下是对这个"java...

    java将office文件转为pdf还可再转flash播放

    本话题主要聚焦于如何利用Java将Office文档(如Word、PowerPoint)转换为PDF,然后再进一步将PDF转换为SWF(Flash动画)文件。以下是关于这个过程的详细解释。 首先,我们要解决的是Office到PDF的转换。这通常涉及...

    基于Java的Office文档转换为PDF服务设计源码

    本源码是基于Java开发的Office文档转换为PDF服务设计,包含35个文件,其中包括7个.java文件,6个.class文件,以及3个.jar文件。此外,还包括3个.png文件,2个.prefs文件和2个.dll文件。此外,还包括1个.classpath...

    java实现office转pdf.zip

    本示例中,我们关注的是如何使用Java来实现Office文档(如Word、Excel或PowerPoint)转换为PDF的解决方案。"java实现office转pdf.zip"这个压缩包包含了2019年7月20日某个项目中的代码,其主要功能就是将Office文件...

    Java用OpenOffice将office转换为PDF

    Java使用OpenOffice转换Office文档为PDF是一种常见的技术需求,尤其在企业级应用中,为了保持一致性和跨平台兼容性,可能会需要将Word、Excel或PowerPoint文档转换为PDF格式。以下将详细介绍如何在Java环境中利用...

    java Excel文件转PDF文件

    在Java编程环境中,将Excel文件转换为PDF文件是一项常见的任务,尤其在数据报告或文档格式转换的场景下。本文将详细介绍如何使用Apache POI库处理Excel数据,以及使用iText库将这些数据导出为PDF格式。Apache POI是...

    java读取word文档.pdf

    首先,标题“java读取word文档.pdf”和描述“java读取word文档.pdf”暗示了文章内容可能涉及使用Java语言读取Word文档的技术。 从片段中可以提取到的关键技术点包括: 1. Apache POI库:Apache POI是一个开源的...

    (WebOffice)java端在线打开编辑文档

    WebOffice是一款专业的在线文档处理系统,它允许用户通过Java平台在Web环境中实现对各种Office文档的在线打开和编辑。这款工具极大地提升了协作效率,让用户无需安装任何桌面版Office软件即可在浏览器中完成文档的...

    onlyoffice展示在线文档

    使用Java程序编写,传入在线文档的url,调用onlyoffice展示在线文档。压缩包中只包含代码,不包含onlyoffice的部署步骤。建议onlyoffice使用Docker部署。

Global site tag (gtag.js) - Google Analytics