这个思路是我参考网上而来,代码是我实现。
采用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; /** * @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:\\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"%> <!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 style="position:absolute;left:10px;top:10px;"> <a id="viewerPlaceHolder" style="width:1000px;height:480px;display:block"></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中的代码,不会你可以参考这里
/**************************************************************************************/
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)\OpenOffice4\program
这一步你可以看你的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值"
效果图示:
以上就是本文的全部内容,希望对大家的学习有所帮助。
早上面的百度,狠狠拷打80分钟,后续慢慢更新面经
我太菜了,C++需要恶补才行,面试完基本上就知道自己寄,面试官特别好给我说了很多,也让我充分认识到自己的不足 如果是项目的话,会问你项目背景以及项目最终的实现结果等等 如果是自己学习的项目的话,会问你对这个项目的学习心得 最后问对C++对掌握程度 实现vector
24.05.23 45mins 部门:百度文库 base北京 面试平台:如流 自我介绍,介绍一个熟悉的项目,离职原因 JS数据类型 基础数据类型和对象数据类型有什么区别 如何判断数据类型 事件循环(宏任务、微任务)举例 JS垃圾回收机制,变量回收 作用域 vue2 双向绑定的原理 双向绑定深度监听失效的原因 父子组件通信 父组件如何调用子组件的方法 nextTick()是什么,使用场景 手撕(共享
一共就面了半小时,有15分钟都在做题的样子😂 手撕: 判断链表有没有环,快慢指针,通过了面试官还要我讲一下思路,我就一直解释推的数学公式,不知道他听没听懂 问题: 我做的项目用了Xgboost,就从这个开始问,原理,GBDT,为什么这种模型好用等等 后来又问了我使用过paddleocr,提升准确率方法,(我也不知道,就瞎说,当时也没提升) 还问我会不会用大数据处理工具,没用过… 问了一些数据处理
提前批 过去有点久了,可能有些回忆不准确了 百度机器学习一面 (电话,很简短) 询问想做的方向 问了LSTM GRU的结构和区别 Attention 原理 Bert 原理 对做NLP怎么看 百度机器学习二面 过项目,问项目涉及到的机器学习算法 概率题 贝叶斯相关 手撕算法 二分查找 先写无重复的 再写有重复找第一个 百度机器学习三面 证明根号二是无理数 用梯度渐近法求根号2 用牛顿法求根号2 手撕
前段时间投算法实习一直没回应,当时觉得连简历都过不了很焦虑,还发了一条动态挺多人回我的。后来陆陆续续也有企业找我笔试,目前做的两个都过了。周中收到了百度的面试通知。 人生中第一次求职面试,不出意外地凉了。细问了项目,有一个强化学习相关的项目面试官相关知识应该挺熟悉,但是我主要做的是数据分析方面的工作,所以对核心算法的实现回答得牛头不对马嘴另一个项目浅问了一下。 然后就手搓代码了。一道搓出来了另一道