为了实现word可以在web上尽可能以原始的排版样式展示出来,选择基于activex控件的方式太过于依赖某种浏览器,而且存在可能须要花费金钱购买相应的控件产品;因而借助flexpaper这种flash展示方式就成为了首选的解决方案。该方案的实现过程主要是先将word文档转换成pdf文档,接着再经过SWFTOOLS工具将pdf文档转换成swf文件,而后flexpaper加载这些swf文件进行展现。php
访问flexpaper的官网地址:http://flexpaper.devaldi.com/download/ 下载web版的flexpaper,同时把须要用到的3个软件也下载下来。我当前下载的最新版本是FlexPaper_2.3.6版。java
先安装好下载好的3个软件包:web
接着解压FlexPaper_2.3.6json
能够看到解压后的文件目录里提供了asp.net版本、java版本和php版本,在这里我选择部署的是java版本,打开java目录,能够看到一个war包,将其部署到tomcat里,而后启动tomcat访问所部署的flexpaper的根路径。初次访问会跳转到一个配置的页面,经过该页面进行设置管理员帐号密码、配置上面所提到的3个软件的安装路径,而后还有配置须要转换的pdf所在的目录及转换后的swf文件存放的目录,这两个目录都须要事先建立好。还有另一个重要的配置是swf的生成模式,flexpaper提供了单文件模式和多文件模式,若是选择单文件模式,那么一个pdf文档转换成swf时,就只生成一个swf文件;若是选择多文件模式,那么一个pdf文档里若是有好几页的内容,那么就会生成多个相对应的swf文件。浏览器
以后只要根据你所配置的文件模式访问刚部署的flexpaper的对应url,而且在url上的doc参数里传递你所配置的pdf目录下的pdf文件名就能够直接在线预览到pdf文件了。tomcat
单文件模式时访问的url:http://127.0.0.1:8080/FlexPaper/common/simple_document.jsp?doc=660521783206862.pdfasp.net
多文件模式时访问的url:http://127.0.0.1:8080/FlexPaper/common/split_document.jsp?doc=660521783206862.pdfless
接下来就是须要在程序中把word文档转换成pdf文档,并将其保存到上面所提到的pdf目录下,以便实现word文档的在线浏览。socket
在这里我使用的是java语言,使用了artofsolving的jodconverter包来进行doc到pdf的转换,转换须要借助OpenOffice,因此还须要下载安装OpenOffice。jsp
我当前下载安装的OpenOffice版本为4.1.2版。
jodconverter用得多的主要有两个版本,一个是2.2.1版,另一个是3.0-beta4版本。
2.2.1版
2.2.1不支持docx格式,而且须要事先经过命令行开启OpenOffice的服务,
开启OpenOffice服务的命令行代码以下:
cd d:\Program Files (x86)\OpenOffice 4\program soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
java关键代码:
// connect to an OpenOffice.org instance running on port 8100 OpenOfficeConnection connection = new SocketOpenOfficeConnection( "127.0.0.1", 8100); connection.connect(); // convert DocumentConverter converter = new OpenOfficeDocumentConverter( connection); converter.convert(inputFile, outputFile); // close the connection connection.disconnect();
若是使用maven来进行管理的,那么2.2.1版的依赖配置以下:
<dependency> <groupId>com.artofsolving</groupId> <artifactId>jodconverter</artifactId> <version>2.2.1</version> </dependency>
3.0-beta4版
3.0-beta4支持docx版本,而且不须要事先经过命令行开启OpenOffice服务,而是能够经过java代码来进行开启和关闭。
java关键代码:
private static OfficeManager officeManager; public static void convert(File originFile,File destFile){ long startTime = System.currentTimeMillis(); startService(); OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager); converter.convert(originFile,destFile); log.info("转换完成.耗时" +( (System.currentTimeMillis() - startTime) / 1000)+ "秒"); stopService(); } private static void startService(){ DefaultOfficeManagerConfiguration configuration=new DefaultOfficeManagerConfiguration(); log.info("准备启动office转换服务..."); configuration.setOfficeHome("D:/Program Files (x86)/OpenOffice 4"); configuration.setPortNumber(8100); configuration.setTaskExecutionTimeout(1000*60);//任务超时时间1分钟 try { officeManager=configuration.buildOfficeManager(); officeManager.start();//启动服务 log.info("office转换服务启动成功!"); } catch (OfficeException e) { log.error("office转换服务启动失败!"); } catch (IllegalStateException e) { log.error("office转换服务启动失败!"); } } private static void stopService(){ if(officeManager!=null){ officeManager.stop(); log.info("office转换服务关闭成功!"); }else{ log.info("office转换服务未启动!"); } }
若是使用maven来进行管理的,3.0-beta4版经过maven中央库下载不到,须要本身经过artofsolving的网站把jar下载下来,而后注册到本身本地的maven仓库里。
jodconverter-core-3.0-beta-4.bat:
mvn install:install-file -DgroupId=com.artofsolving -DartifactId=jodconverter -Dversion=3.0-beta-4 -Dpackaging=jar -Dfile=%CD%\jodconverter-core-3.0-beta-4.jar
pom配置:
<dependency> <groupId>com.artofsolving</groupId> <artifactId>jodconverter</artifactId> <version>3.0-beta-4</version> </dependency> <dependency> <groupId>org.openoffice</groupId> <artifactId>juh</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>org.openoffice</groupId> <artifactId>unoil</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>commons-cli</groupId> <artifactId>commons-cli</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20090211</version> </dependency>
因为3.0-beta4的jar包是本身写命令行注册到本地maven库里的,因此没带有其依赖包的关系,所以须要手动将其所依赖的其余jar包给配置到pom文件里。