爲了實現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文件裏。