该部分主要内容:文件上传,以及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
相关推荐
因此,如何将常见的Office文档和PDF文件转换为适合Web展示的格式成为了一个关键问题。 #### 二、关键技术介绍——Java结合OpenOffice与SWFTools实现文档转换 ##### 1. 安装OpenOffice.org OpenOffice.org 是一套由...
标题“java实现office、wps转pdf,pdf转word”指的是利用Java编程来实现在不同办公文档格式间的转换,特别是从Microsoft Office和WPS格式转换为PDF,以及从PDF反向转换为Word文档。 首先,让我们讨论从Office和WPS...
Java作为一种强大的编程语言,提供了丰富的库和工具来实现各种文件格式之间的转换,包括将Office文件(如Word、Excel、PowerPoint)转换为PDF格式。这个过程涉及到的技术点主要包括文件读取、内容解析以及格式转换。...
"Office文档转PDF显示"这个主题涉及到的技术点是利用特定的库或者工具,将Microsoft Office创建的文件(如Word文档、Excel电子表格和PowerPoint演示文稿)转换成PDF格式。在给定的描述中,提到了一个名为"Aspose ...
在IT行业中,尤其是在Web开发领域,用户经常需要预览上传的Office文档(如Word、Excel、PowerPoint)和PDF文件,而无需下载到本地。为了满足这种需求,开发者需要掌握如何在Web环境中实现在线预览的技术。本实例将...
综上所述,使用Aspose for Java,你可以轻松地将Office文档转换为PDF,但需要正确配置jar包依赖,处理认证文件,并根据项目需求选择合适的转换策略。记得定期更新Aspose库以获取最新的特性和修复。
3. **定义转换逻辑**:创建一个方法,接收源文件路径和目标PDF文件路径作为参数。然后,使用`JODConverter`的转换方法,将源文件转换为PDF。 ```java import org.jodconverter.LocalConverter; import org....
java将office文档pdf文档转换成swf文件在线预览
在Java编程环境中,读取Office文档是一项常见的任务,特别是在数据处理和自动化办公场景下。本示例Demo专注于演示如何使用Java来读取不同类型的Office文档,包括Excel、Word、PDF和PowerPoint。以下是对这个"java...
在IT行业中,尤其是在Web开发领域,常常需要处理用户上传的各种文档,其中尤以Office文档(如Word、Excel、PowerPoint)和PDF文档最为常见。Java作为广泛应用的后端开发语言,提供了解决这一问题的多种方案。本篇将...
本话题主要聚焦于如何利用Java将Office文档(如Word、PowerPoint)转换为PDF,然后再进一步将PDF转换为SWF(Flash动画)文件。以下是关于这个过程的详细解释。 首先,我们要解决的是Office到PDF的转换。这通常涉及...
标题中的"java-office转化为pdf"指的就是这一需求,即使用Java编程语言处理Office文档并将其转换成PDF。这种转换在企业应用中非常常见,比如报表生成、文档分享和打印预览等场景。 描述中提到的"java针对office转化...
本源码是基于Java开发的Office文档转换为PDF服务设计,包含35个文件,其中包括7个.java文件,6个.class文件,以及3个.jar文件。此外,还包括3个.png文件,2个.prefs文件和2个.dll文件。此外,还包括1个.classpath...
本示例中,我们关注的是如何使用Java来实现Office文档(如Word、Excel或PowerPoint)转换为PDF的解决方案。"java实现office转pdf.zip"这个压缩包包含了2019年7月20日某个项目中的代码,其主要功能就是将Office文件...
Java使用OpenOffice转换Office文档为PDF是一种常见的技术需求,尤其在企业级应用中,为了保持一致性和跨平台兼容性,可能会需要将Word、Excel或PowerPoint文档转换为PDF格式。以下将详细介绍如何在Java环境中利用...
在Java编程环境中,将Excel文件转换为PDF文件是一项常见的任务,尤其在数据报告或文档格式转换的场景下。本文将详细介绍如何使用Apache POI库处理Excel数据,以及使用iText库将这些数据导出为PDF格式。Apache POI是...
首先,标题“java读取word文档.pdf”和描述“java读取word文档.pdf”暗示了文章内容可能涉及使用Java语言读取Word文档的技术。 从片段中可以提取到的关键技术点包括: 1. Apache POI库:Apache POI是一个开源的...
WebOffice是一款专业的在线文档处理系统,它允许用户通过Java平台在Web环境中实现对各种Office文档的在线打开和编辑。这款工具极大地提升了协作效率,让用户无需安装任何桌面版Office软件即可在浏览器中完成文档的...
本教程将详细介绍如何使用Java进行文件导出,并确保与Office 2003和Office 2007的兼容性。 首先,我们要提到的是Apache POI项目,这是一个用于读写Microsoft Office格式文件的开源Java库。对于Word文档(.doc和....