之前在做的一个项目,需要到在线浏览技术实现文档在线浏览的。于是,我在网上搜索了一下解决方案,我觉得可以接受的方案,或者说思路是:
首先将上传的office文件转为pdf文件,然后后端向前端返回一个pdf文件流,然后前端用JavaScript的组件去解析pdf文件然后展示出来。大体上是这样一个思路。
用到的技术:
jodconverter这个java工具类,openoffice开源软件,pdf.js这个JavaScript组件工具。
实现的方式:
调用jodconverter这个java工具类的API,它的底层代码与openffice进行通讯,然后openoffice将office文件或者图片转换为pdf文件。然后当前端需要浏览office文件时,就把转换后的pdf文件发送给前端,然后前端用pdf.js这个JavaScript组件工具去解析就可以实现在线浏览的功能了。总结来说就是:jodconverter+openoffice+pdf.js就可以实现office文件在线浏览了。
什么是Jodconverter?
Jodconverter是一个JAVA的OpenDocument文件转换器,利用OpenOffice.org可以进行多种文档格式之间的转换,支持的格式包括OpenDocument,PDF,RTF,Word,Excel,PowerPoint,以及Flash。它可以被用做JAVA库,命令行工具,或者一个WEB应用。
maven依赖:
<dependency>
<groupId>org.jodconverter</groupId>
<artifactId>jodconverter-core</artifactId>
<version>4.0.0-RELEASE</version>
</dependency>
什么是openoffice?
OpenOffcie.org是一个开源的Office软件,同时也是一个平台,用户可以基于其提供的API接口来开发自己的应用程序。
官网地址:http://www.openoffice.org/zh-cn/
为什么要使用openoffice?
因为它开源,我们要实现office文件转为pdf文件的功能需要在服务器上进行,而服务器一般都是linux系统,安装不了微软的office软件,而且它需要购买。所以我们选择了openoffice这款开源office软件来将office文件转为pdf文件。
pdf.js简介
PDF.js 是基于开放的 HTML5及 JavaScript 技术实现的开源产品。简单说就是一个
PDF 解析器。运用HTML5和JavaScript(即pdf.js仅使用安全的web语言,不包含任何攻击者可以用的本地代码块)的PDF阅读器pdf.js,直接在标准的HTML页面上载入和渲染PDF文件, 还可以提高安全性(不需要安装第三方插件,安全性由浏览器保证),浏览器所做的安全措施已经为pdf.js提供了安全的运行环境。其对IE和 FireFox浏览器的要求是IE9+, FireFox19+。
在线示例:
http://jsbin.com/pdfjs-helloworld-v2/1/edit,
http://jsbin.com/pdfjs-prevnext-v2/1/edit
源码:
https://github.com/mozilla/pdf.js
官网:
http://mozilla.github.io/pdf.js/
pdf.js VS 传统浏览器读取pdf
一般來說,PDF档案格式都是在浏览器中由外挂程式來描绘,通常是Adobe自己的PDF reader或來自其他供应商的描绘工具,但這些外挂通常无法充分运用PDF的特点,而且由于含有大量的受信任代码,使得Google Chrome浏览器必须运用SandBox沙箱原理,來检查PDF描绘工具是否遭到未知病毒感染。使用adobe,必须在本地安装软件才能使用,而pdf.js不依赖环境、渲染速度快([测试过,确实很快)、安全性高。至于关于pdf.js之后的篇章再进行详细讲解吧
参考文章:
jodconverter+openoffice:
http://www.cnblogs.com/star-studio/archive/2011/12/09/2281807.html
http://www.cnblogs.com/luckyxiaoxuan/archive/2012/06/13/2548355.html
http://blog.csdn.net/u012454773/article/details/45876445
http://sns.ruanko.com/space.php?uid=4163&do=blog&id=124199
pdf.js:
http://www.cnblogs.com/jacksoft/p/5302587.html
http://www.cnblogs.com/morang/p/4598894.html
http://blog.csdn.net/mmrsdym/article/details/27802807