首先所用到的技術就是網上通用的openoffice+swfTools+FlexPaper。根據網上查看資料,初步理清實現思路。首先經過openoffice實現office文檔轉化爲PDF文檔。第二步經過swfTools把pdf文檔轉化爲swf文件。最後經過FlexPaper顯示swf文件。javascript
一 、經過openoffice實現把office文檔轉化爲PDF,首先須要用到jodconverter這個包來轉化,而jodconverter經過openofficce轉化因此要先安裝openoffice,本例用到的是openoffice3.3.0和jodconverter2.2.2。css
step1:安裝啓動openoffice. 1,執行命令 cd C:\Program Files (x86)\OpenOffice.org 3\program 2,輸入命令:soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard 。3,在CMD中用如下命令查看8100是否已被監聽:netstat -anop tcphtml
step2 用JAVA轉化文檔java
import java.io.File; import java.net.ConnectException; import java.util.Date; import com.artofsolving.jodconverter.DocumentConverter; import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection; import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection; import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter; public class Doc2PdfUtil extends Thread { private File inputFile;//須要轉換的文件 private File outputFile;//輸出的文件 public Doc2PdfUtil(File inputFile,File outputFile){ this.inputFile = inputFile; this.outputFile = outputFile; } public void docToPdf(){ Date start = new Date(); //連接openoffice的8100端口的 OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100); try { connection.connect(); DocumentConverter converter = new OpenOfficeDocumentConverter(connection); //轉化和要生成的流 converter.convert(inputFile, outputFile); } catch (ConnectException e) { e.printStackTrace(); }finally{ if(connection != null){ connection.disconnect(); connection = null; } } } public void run(){ this.docToPdf(); } public File getInputFile() { return inputFile; } public void setInputFile(File inputFile) { this.inputFile = inputFile; } public File getOutputFile() { return outputFile; } public void setOutputFile(File outputFile) { this.outputFile = outputFile; } public static void main(String[] args) { File inputFile = new File("f://普京發佈的白皮書.doc"); File outputFile = new File("f://普京發佈的白皮書.pdf"); Doc2PdfUtil dp = new Doc2PdfUtil(inputFile, outputFile); dp.start(); } }
2、把PDF轉化爲swf,這個階段轉化須要使用工具swftools來實現jquery
step1,swftools也是須要下載而且安裝到咱們本地的web
step2.安裝完成後用JAVA調用pdf2swf.exe來實現轉化文檔less
try { //Runtime.getRuntime()使應用程序可以與其運行的環境相鏈接。能夠經過 getRuntime 方法獲取當前運行時。 //.exec("d:/tool/pdf2swf/pdf2swf.exe -o f:/aobama.swf -s flashversion=9 f:/aobama.pdf")在單獨的進程中執行指定的字符串命令。 //特別注意,爲了生成的swf文件一頁也能顯示,須要轉換的時候加上flashversion=9 Process p = Runtime.getRuntime().exec("d:/tool/pdf2swf/pdf2swf.exe -o f:/aobama.swf -s flashversion=9 f:/aobama.pdf"); //一直讀到進程終止 BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); while(br.readLine()!=null){ p.waitFor();//注意這個方法會形成進程的堵塞。註釋掉不影響程序的運行 } } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); }
3、經過FlexPaper來讀取swf文件而且在頁面上顯示。本人使用的是的FlexPaper_1.5.1_flash這個版本,首先把解壓出來的文件中的3個js引入項目jquery.js、flexpaper_flash.js、flexpaper_flash_debug.js。而後把FlexPaperViewer.swf文件放到WebRoot根目錄下,新建JSP顯示頁面來顯示socket
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/flexpaper_flash.js"></script> <script type="text/javascript" src="js/flexpaper_flash_debug.js"></script> <style type="text/css" media="screen"> html, body { height:100%; } body { margin:0; padding:0; overflow:auto; } #flashContent { display:none; } </style> <title>文檔在線預覽系統</title> </head> <body> <div style="position:absolute;left:50px;top:10px;"> <a id="viewerPlaceHolder" style="width:820px;height:650px;display:block"></a> <script type="text/javascript"> var fp = new FlexPaperViewer( 'FlexPaperViewer', 'viewerPlaceHolder', { config : { SwfFile : 'aobama.swf', Scale : 0.6, ZoomTransition : 'easeOut', ZoomTime : 0.5, ZoomInterval : 0.2, FitPageOnLoad : true, FitWidthOnLoad : false, FullScreenAsMaxWindow : false, ProgressiveLoading : false, MinZoomSize : 0.2, MaxZoomSize : 5, SearchMatchAll : false, //InitViewMode : 'TwoPage', ViewModeToolsVisible : true, ZoomToolsVisible : true, NavToolsVisible : true, CursorToolsVisible : true, SearchToolsVisible : true, localeChain: 'en_US' }}); </script> </div> </body> </html>
4、工程的結構和顯示結果。tcp
最後一個問題是關於FlexPaper指定本地硬盤的文件路徑。web項目中是不容許的,只能放在WebRoot下,若是有方法請通知下,你們一塊兒學習。工具