為了實現word能夠在web上盡量以原始的排版樣式展現出來,選擇基於activex控件的方式太過於依賴某種瀏覽器,並且存在可能需要花費金錢購買相應的控件產品;於是借助flexpaper這種flash展現方式就成為了首選的解決方案。該方案的實現過程主要是先將word文檔轉換成pdf文檔,接着再通過SWFTOOLS工具將pdf文檔轉換成swf文件,然后flexpaper加載這些swf文件進行展示。
訪問flexpaper的官網地址:http://flexpaper.devaldi.com/download/ 下載web版的flexpaper,同時把需要用到的3個軟件也下載下來。我當前下載的最新版本是FlexPaper_2.3.6版。
先安裝好下載好的3個軟件包:
接着解壓FlexPaper_2.3.6
可以看到解壓后的文件目錄里提供了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文件了。
單文件模式時訪問的url:http://127.0.0.1:8080/FlexPaper/common/simple_document.jsp?doc=660521783206862.pdf
多文件模式時訪問的url:http://127.0.0.1:8080/FlexPaper/common/split_document.jsp?doc=660521783206862.pdf
接下來就是需要在程序中把word文檔轉換成pdf文檔,並將其保存到上面所提到的pdf目錄下,以便實現word文檔的在線瀏覽。
在這里我使用的是java語言,使用了artofsolving的jodconverter包來進行doc到pdf的轉換,轉換需要借助OpenOffice,所以還需要下載安裝OpenOffice。
我當前下載安裝的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文件里。