基本实现实现仿百度文库

     首先所用到的技术就是网上通用的openoffice+swfTools+FlexPaper。根据网上查看资料,初步理清实现思路。首先通过openoffice实现office文档转化为PDF文档。第二步通过swfTools把pdf文档转化为swf文件。最后通过FlexPaper显示swf文件。

  一 、通过openoffice实现把office文档转化为PDF,首先需要用到jodconverter这个包来转化,而jodconverter通过openofficce转化所以要先安装openoffice,本例用到的是openoffice3.3.0和jodconverter2.2.2。

    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 tcp

    step2 用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();
 }
}

二、把PDF转化为swf,这个阶段转化需要使用工具swftools来实现

    step1,swftools也是需要下载并且安装到我们本地的

    step2.安装完成后用JAVA调用pdf2swf.exe来实现转化文档

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();
 }

三、通过FlexPaper来读取swf文件并且在页面上显示。本人使用的是的FlexPaper_1.5.1_flash这个版本,首先把解压出来的文件中的3个js引入项目jquery.js、flexpaper_flash.js、flexpaper_flash_debug.js。然后把FlexPaperViewer.swf文件放到WebRoot根目录下,新建JSP显示页面来显示

<%@ 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>

四、工程的结构和显示结果。

基本实现实现仿百度文库_第1张图片

基本实现实现仿百度文库_第2张图片

最后一个问题是关于FlexPaper指定本地硬盘的文件路径。web项目中是不允许的,只能放在WebRoot下,如果有方法请通知下,大家一起学习。

你可能感兴趣的:(实现仿百度文库)