手机
当前位置:查字典教程网 >编程开发 >Java >学习Java模拟实现百度文档在线浏览
学习Java模拟实现百度文档在线浏览
摘要:这个思路是我参考网上而来,代码是我实现。采用Apache下面的OpenOffice将资源文件转化为pdf文件,然后将pdf文件转化为swf文...

这个思路是我参考网上而来,代码是我实现。

采用Apache下面的OpenOffice将资源文件转化为pdf文件,然后将pdf文件转化为swf文件,用FlexPaper浏览。

ok,

A、下载OpenOffice (转换资源文件)

B、下载JodConverter(调用OpenOffice)

C、下载Swftools(Pdf2Swf)

D、下载 FlexPaper(浏览swf文件)

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

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

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

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

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

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; /** * @Author:NuoYan * @Date:2015-2-2 下午2:24:58 * TODO: 1、第一步,首先获取到需要查看的文件 * 2、第二部,将获取的文件(doc,xls,txt,ppt,03/07版本转化为PDF),这一步需要调用OpenOffice * 3、第三部,将资源文件转换好的PDF文件转换为swf文件,使用FlexPaperViewer.swf进行浏览查看 */ 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"); } /** * @Author:NuoYan * @Date:2015-2-2 下午2:28:22 TODO://源文件转化为PDF文件 */ 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("文件路径不存在!!!"); } } /** * @Author:NuoYan * @Date:2015-2-2 下午2:28:32 * @throws Exception * TODO:PDF转化为SWF文件 */ private void pdf2swf() throws Exception { if (!swfFile.exists()) { if (pdfFile.exists()) { String command = "C:Pdf2swfpdf2swf.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"%> <!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>百度文库在线预览</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <a href="<%=request.getContextPath()%>/BaiDuServlet?savFile=1234.xls">在线预览</a> </body> </html>

6、编写baseFile.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"> <title>在线阅读</title> <script type="text/javascript" src="../FlexPaper/js/flexpaper_flash.js"></script> <style type="text/css"> html,body{height: 100%;} body { margin: 0;padding: 0;overflow: auto; } #flashContent { display:none; } </style> </head> <body> <div> <a id="viewerPlaceHolder"></a> <script type="text/javascript"> var fp = new FlexPaperViewer( '../FlexPaper/FlexPaperViewer', 'viewerPlaceHolder', { config : { SwfFile : escape('../reader/<%=(String)session.getAttribute("swfName")%>'), 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 : 'Portrait', PrintPaperAsBitmap : false, ViewModeToolsVisible : true, ZoomToolsVisible : true, NavToolsVisible : true, CursorToolsVisible : true, SearchToolsVisible : true, localeChain: 'zh_CN' }}); </script> </div> </body> </html>

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

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

/**************************************************************************************/

7、到这里就完成,需要注意的是:

(1)、swftools-2013-04-09-1007.exe文件安装路径不要太深,不然Java调用外部命令不能执行

(2)、

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

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值"

效果图示:

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

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

【学习Java模拟实现百度文档在线浏览】相关文章:

使用java代码实现保留小数点的位数

简单学习Java抽象类要点及实例

用Java实现希尔排序的示例

基于Java内存溢出的解决方法详解

java实现遗传算法实例分享(打印城市信息)

java 实现文件复制和格式更改的实例

java中servlet实现登录验证的方法

java自定义注解接口实现方案

java文件操作代码片断实例实现统计文件中字母出现的个数功能

java导出csv方法实现讲解

精品推荐
分类导航