文件在线预览doc,docx转换pdf(一)
1. 前言
文档转换是一个是一块硬骨头,但是也是必不可少的,我们正好做的知识库产品中,也面临着同样的问题,文档转换,精准的全文搜索,知识的转换率,是知识库产品的基本要素,初识阅读时同时绞尽脑汁,自己开发?,集成第三方?都是中小企业面临的一大难题…….
自己在网上搜索着找到poi开源出来的很多例子,最开始是用poi把所有文档转换为html,
1) 在github上面找到一个https://github.com/litter-fish/transform完整的demo,你想要的转换基本都提供,初学者可以参照实现转换出来的基本样子,达到通用级别,需要自己花很多功夫。此开源代码是基于poi和itext(pdf)的转换方式。
2) https://gitee.com/kekingcn/file-online-preview这是开源中国提供的一个源码,基于jodconverter,原理是调用windows,另存为的组件,实现转换。
3) 收费产品例如【永中office】【office365】【idocv】、【https://downloads.aspose.com/words/java】
2. 转换思路
自己在尝试过很多后,也与永中集成了文档转换,发现,要想完成预览的品质,必须的做二次渲染。毕竟永中做了十几年文档转换我们不能比的,自己琢磨后,发现一个勉强靠谱的思路,doc和docx都转换为pdf实现预览。都是在基于poi的基础上。
2.1. Doc转换pdf
1) Doc转换为xml
/**
* doc转xml
*/
public String toXML(String filePath){
try{
POIFSFileSystem nPOIFSFileSystem = new POIFSFileSystem(new File(filePath));
HWPFDocument nHWPFDocument = new HWPFDocument(nPOIFSFileSystem);
WordToFoConverter nWordToHtmlConverter = new WordToFoConverter(
DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
PicturesManager nPicturesManager = new PicturesManager() {
public String savePicture(byte[] arg0, PictureType arg1,String arg2, float arg3, float arg4) {
//file:///F://20.vscode//iWorkP//temp//images//0.jpg
//System.out.println("file:///"+PathMaster.getWebRootPath()+ java.io.File.separator + "temp"+java.io.File.separator+"images" + java.io.File.separator + arg2);
// return "file:///"+PathMaster.getWebRootPath()+java.io.File.separator +"temp"+java.io.File.separator+"images" + java.io.File.separator + arg2;
return "file:///"+PathMaster.getWebRootPath()+java.io.File.separator +"temp"+java.io.File.separator+"images" + java.io.File.separator + arg2;
}
};
nWordToHtmlConverter.setPicturesManager(nPicturesManager);
nWordToHtmlConverter.processDocument(nHWPFDocument);
String nTempPath = PathMaster.getWebRootPath() + java.io.File.separator + "temp" + java.io.File.separator + "images" + java.io.File.separator;
File nFile = new File(nTempPath);
if (!nFile.exists()) {
nFile.mkdirs();
}
for (Picture nPicture : nHWPFDocument.getPicturesTable().getAllPictures()) {
nPicture.writeImageContent(new FileOutputStream(nTempPath + nPicture.suggestFullFileName()));
}
Document nHtmlDocument = nWordToHtmlConverter.getDocument();
OutputStream nByteArrayOutputStream = new FileOutputStream(OUTFILEFO);
DOMSource nDOMSource = new DOMSource(nHtmlDocument);
StreamResult nStreamResult = new StreamResult(nByteArrayOutputStream);
TransformerFactory nTransformerFactory = TransformerFactory.newInstance();
Transformer nTransformer = nTransformerFactory.newTransformer();
nTransformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
nTransformer.setOutputProperty(OutputKeys.INDENT, "YES");
nTransformer.setOutputProperty(OutputKeys.METHOD, "xml");
nTransformer.transform(nDOMSource, nStreamResult);
nByteArrayOutputStream.close();
return "";
}catch(Exception e){
e.printStackTrace();
}
return "";
}
2) Xml转换为pdf
这里我是使用fop通过xml转换为pdf,也是最近欣喜的一个发现,poi官网推荐的我一直没去仔细看,里面的架包和永中的很多高清包,一模一样,现在貌似路子对了。有兴趣者研究去吧。我的源码已经在githubhttps://github.com/liuxufeijidian/file.convert.master/tree/master上面,环境已经配置好,需要准备好doc和docx文档即可。
/*
* xml 转pdf
*/
public void xmlToPDF() throws SAXException, TransformerException{
// Step 1: Construct a FopFactory by specifying a reference to the configuration file
// (reuse if you plan to render multiple documents!)
FopFactory fopFactory = null;
new URIResolverAdapter(new URIResolver(){
public Source resolve(String href, String base) throws TransformerException {
try {
URL url = new URL(href);
URLConnection connection = url.openConnection();
connection.setRequestProperty("User-Agent", "whatever");
return new StreamSource(connection.getInputStream());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
});
OutputStream out = null;
try {
fopFactory = FopFactory.newInstance(new File(CONFIG));
// Step 2: Set up output stream.
// Note: Using BufferedOutputStream for performance reasons (helpful with FileOutputStreams).
out = new BufferedOutputStream(new FileOutputStream(OUTFILEPDF));
// Step 3: Construct fop with desired output format
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
// Step 4: Setup JAXP using identity transformer
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(); // identity transformer
// Step 5: Setup input and output for XSLT transformation
// Setup input stream
Source src = new StreamSource(OUTFILEFO);
// Resulting SAX events (the generated FO) must be piped through to FOP
Result res = new SAXResult(fop.getDefaultHandler());
// Step 6: Start XSLT transformation and FOP processing
transformer.transform(src, res);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
//Clean-up
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}
2.1.3
很多时候我们是使用word直接转的html,但是需要自己写二次渲染的代码,较为复杂,我是使用迂回方法,doc转xml,再用xml转换pdf,转换出来的pdf用pdfjs渲染即可实现和浏览器打开一样的预览,pdfjs预览方法详情见https://blog.csdn.net/liuxufeijidian/article/details/82260199
ending:大家都想看效果如何,https://github.com/litter-fish/transform,github获取改源码,配置好doc和docx文档即可实现转换,接下来会继续努力不间断优化和更新文档转换。
分享到:
相关推荐
在开发H5应用时,有时候我们需要提供对PDF和DOCX文档的预览功能,以便用户可以在浏览器中查看这些文件而无需下载。`uniapp`是一个跨端开发框架,支持开发H5、iOS、Android等平台的应用。在这个场景下,我们将讨论...
其中一个常见的需求是在线预览各种办公文件,如文档(doc、docx)、电子表格(xls、xlsx)以及PDFs,而无需用户下载文件到本地。本文将详细介绍如何使用Spring Boot实现这一功能。 首先,我们需要引入相关的依赖库...
在现代Web应用中,提供用户在线预览各类文件的能力是一个重要的功能,这使得用户无需下载文件就能查看其内容。本文将详细介绍如何使用HTML和JavaScript技术实现在浏览器中预览PDF、Excel、PPT、DOC、JPG以及PNG格式...
本文将详细讲解如何利用Java后端技术实现文件在线预览,特别是针对文档(如.doc、.docx、.xls、.xlsx、.ppt、.pptx)和图片格式的预览。 首先,我们需要理解文件预览的基本原理:用户通过浏览器发送请求到服务器,...
### Linux服务上实现在线预览PPT/PPTX/DOC/DOCX/XLS/XLSX文件的安装插件详细步骤 #### 环境准备 本文档主要介绍如何在Linux服务器上实现各种常见文档(包括PPT、PPTX、DOC、DOCX、XLS、XLSX)的在线预览功能。此...
要实现这样的功能,一种常见的方法是将这些文件转换为通用的PDF格式进行预览。本篇文章将深入探讨如何使用Java实现这一目标,以及涉及到的关键技术与库。 首先,我们要用到的是一些第三方库,它们能够处理不同的...
总的来说,"PDF/DOC/DOCX/XLS/XLSX/PPT/PPTX文件网页预览ASP.NET MVC项目"是一个综合性的Web开发案例,涵盖了文件处理、前端展示、安全防护等多个方面,是学习和实践ASP.NET MVC框架,尤其是文件预览功能实现的好...
Aspose是一系列强大的文件处理组件,支持多种文件格式,如Word(.docx)、Excel(.xlsx)、PowerPoint(.pptx)和PDF。在Asp.NET MVC项目中,我们可以使用Aspose库将这些文件转换为HTML或其他适合在浏览器中显示的...
在IT行业中,转换Office文档为PDF格式是一种常见的需求,特别是在跨平台分享、打印预览或长期存储时。本文将深入探讨如何使用C#编程语言来实现这个功能,涉及的文件类型包括doc、docx、xls、xlsx、ppt和pptx。 首先...
在IT行业中,将Word文档转换为PDF格式是常见的需求,特别是在需要在线预览或跨平台兼容性时。这个"Word转PDF在实现在线预览功能.rar"压缩包提供了一个使用Java来实现这一功能的解决方案。Java作为一种广泛使用的编程...
首先,你需要引入一个合适的库来处理各种文件类型的预览。例如,`file-saver` 可用于保存文件,`xlsx` 用于Excel文件,`pdfjs-dist` 用于PDF,`officegen` 处理Office文档,`html2canvas` 和 `jspdf` 可用于HTML和...
3. **PDF转HTML**:转换PDF到HTML通常需要第三方库,如`PDFSharp`或`iTextSharp`,但这些库并不直接支持转换,可能需要借助PDF阅读器引擎,如PDFium或PDF.js。另外,Adobe提供了PDF-to-HTML SDK,可以更高效地完成...
在IT行业中,将PDF、DOC、DOCX和PPTX文件转换为图片是一种常见的需求,尤其是在需要预览文档内容、防止格式更改或者在网络上传输时。这个名为"pdf、doc、docx、pptx文件转图片依赖包.zip"的压缩包提供了一套工具和...
Word文件的转换通常涉及读取DOC或DOCX文件,解析其内容,包括文本、样式、图像等,并将其转换为HTML标记。这需要对Office文档的结构有深入理解,以便准确地复制原始格式。 5. **Excel转HTML**: Excel文件转换...
它能读取、创建、编辑和转换PDF文件,并且支持在Web应用中预览PDF内容。通过将PDF页面渲染为图像,开发者可以在浏览器中展示PDF内容,用户无需安装额外的PDF阅读器。 5. **在线预览实现流程** - **文件上传**:...
“FileConvert.class.php”可能是用于文件转换的类,比如将其他格式的文档(如.doc、.docx)转换为PDF,以便于在线预览。这个类可能包含了一些关键函数,如convert(),它接收一个源文件路径和目标文件路径作为参数,...
在现代的Web应用中,提供在线预览功能已经成为一种常见的需求,尤其是对于处理各种文档格式如Office(Word、Excel、PowerPoint)和PDF时。本文将深入探讨如何使用OpenOffice技术在Web项目中实现在前端在线预览这些...
不需要打开.doc, .docx, .xls, .xlsx, .ppt, .pptx 直接批量转换成pdf文件,完成绿色和免费,转换成pdf的页面格式和源文件打印预览格式相同,win 7/win 10 .net 4.0 以上版本运行。
转换后的PDF文件可以方便地在各种设备和浏览器上进行在线预览,因为它是一种开放标准,具有良好的跨平台兼容性。 在实际应用中,你可能会遇到以下技术挑战: 1. 文档格式兼容性:确保转换过程中保留原始格式和样式...