栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

学习Java模拟实现百度文档在线浏览

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学习Java模拟实现百度文档在线浏览

这个思路是我参考网上而来,代码是我实现。
采用Apache下面的OpenOffice将资源文件转化为pdf文件,然后将pdf文件转化为swf文件,用FlexPaper浏览。
ok,
A、下载OpenOffice (转换资源文件)
B、下载JodConverter(调用OpenOffice)
C、下载Swftools(Pdf2Swf)
D、下载 FlexPaper(浏览swf文件)

下载之后,先别急安装,请看完这篇博文

1、先看我们的MyEclipse工程结构

2、将我们下载下来的jodconverter-2.2.2.zip解压之后将所有的jar文件拷贝到baiduDoc的lib下面去

3、在WebRoot下面新建FlexPaper文件夹,将解压后的FlexPaper全部拷贝到FlexPaper中去

4、新建BaiDuServlet.java文件

package com.baidu.util;
 
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ConnectException;
 
import javax.imageio.stream.FileImageInputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
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 BaiDuServlet extends HttpServlet {
  private File sourceFile;// 要转化的源文件
  private File pdfFile;// pdf中间文件对象
  private File swfFile;// swf目标文件对象
  private String filePath;// 用来保存文件路径
  private String fileName;// 不包括后缀名的文件名
 
  public File getSourceFile() {
    return sourceFile;
  }
 
  public void setSourceFile(File sourceFile) {
    this.sourceFile = sourceFile;
  }
 
  public File getPdfFile() {
    return pdfFile;
  }
 
  public void setPdfFile(File pdfFile) {
    this.pdfFile = pdfFile;
  }
 
  public File getSwfFile() {
    return swfFile;
  }
 
  public void setSwfFile(File swfFile) {
    this.swfFile = swfFile;
  }
 
  public String getFilePath() {
    return filePath;
  }
 
  public void setFilePath(String filePath) {
    this.filePath = filePath;
  }
 
  public String getFileName() {
    return fileName;
  }
 
  public void setFileName(String fileName) {
    this.fileName = fileName;
  }
 
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    String saveFileName = request.getParameter("savFile");
    System.out.println(saveFileName);
    String webPath = request.getRealPath("/");
    filePath = webPath + "reader\" + saveFileName;
    fileName = filePath.substring(0, filePath.lastIndexOf("."));
    // 创建三个文件对象
    sourceFile = new File(filePath);
    pdfFile = new File(fileName + ".pdf");
    swfFile = new File(fileName + ".swf");
    System.out.println(pdfFile);
    System.out.println(swfFile);
    // 1、将源文件转化为pdf格式文件
    src2pdf();
    try {
      // 2、将pdf文件转化为swf文件
      pdf2swf();
    } catch (Exception e) {
      e.printStackTrace();
    }
    // 将转化好的文件绑定到session上去
    request.getSession().setAttribute("swfName", swfFile.getName());
    System.out.println(swfFile.getName());
    // 重定向到预览页面
    response.sendRedirect(request.getContextPath() + "/reader/baseFile.jsp");
  }
 
  
  private void src2pdf() {
    if (sourceFile.exists()) {
      // 如果不存在,需要转份为PDF文件
      if (!pdfFile.exists()) {
 // 启用OpenOffice提供的转化服务
 OpenOfficeConnection conn = new SocketOpenOfficeConnection(8100);
 // 连接OpenOffice服务器
 try {
   conn.connect();
   // 建立文件转换器对象
   documentConverter converter = new OpenOfficedocumentConverter(
conn);
   converter.convert(sourceFile, pdfFile);
   // 断开链接
   conn.disconnect();
   System.out.println("转换成功");
 } catch (ConnectException e) {
   e.printStackTrace();
 }
      } else {
 System.out.println("已经存在PDF文件,不需要在转换!!");
      }
    } else {
      System.out.println("文件路径不存在!!!");
    }
 
  }
 
  
  private void pdf2swf() throws Exception {
    if (!swfFile.exists()) {
      if (pdfFile.exists()) {
 String command = "C:\Pdf2swf\pdf2swf.exe "
     + pdfFile.getPath() + " -o " + swfFile.getPath()
     + " -T 9";
 System.out.println("转换命令:" + command);
 // Java调用外部命令,执行pdf转化为swf
 Runtime r = Runtime.getRuntime();
 Process p = r.exec(command);
 System.out.println(loadStream(p.getInputStream()));
 System.out.println("swf文件转份成功!!!");
 System.out.println(swfFile.getPath());
      } else {
 System.out.println("不存在PDF文件");
      }
    }
 
  }
   
  private static String loadStream(InputStream in) throws Exception {
    int len = 0;
    in = new BufferedInputStream(in);
    StringBuffer buffer = new StringBuffer();
    while ((len = in.read()) != -1) {
      buffer.append((char) len);
    }
    return buffer.toString();
  }
 
}

5、修改index.jsp

<%@ page language="java" import="java.util.*"pageEncoding="UTF-8"%>


 
  百度文库在线预览
  
  
    
  
  
 
 
  /BaiDuServlet?savFile=1234.xls">在线预览
 

6、编写baseFile.jsp文件

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>




在线阅读


html,body{height: 100%;}
body {
  margin: 0;padding: 0;overflow: auto;
}
#flashContent { display:none; }




      
      
    
 

注意baseFile.jsp中的代码,不会你可以参考这里

7、到这里就完成,需要注意的是:
(1)、swftools-2013-04-09-1007.exe文件安装路径不要太深,不然Java调用外部命令不能执行

(2)、

       

    2.1、红色1标记路径不能错,我就犯这个错误了       
    2.2、红色标记2还可以写http://127.0.0.1:8080/baiduDoc/reader/...

(3)、启动OpenOffice的命令,不是直接双击启动的。官网启动方式,使用cd命令打开安装目录!
安装完openoffice后
A.安装服务
cd C:Program Files (x86)OpenOffice4program
这一步你可以看你的OpenOffice安装哪里
执行
soffice -headless-accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
B.查看是否安装成功
   2.1查看端口对应的pid
   netstat -ano|findstr "8100"
   2.2查看pid对应的服务程序名
   tasklist|findstr "ipd值"

效果图示:

以上就是本文的全部内容,希望对大家的学习有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/151331.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号