基本實現實現仿百度文庫

     首先所用到的技術就是網上通用的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下,若是有方法請通知下,你們一塊兒學習。工具

相關文章
相關標籤/搜索