最近项目中要求在阅读文档的时候要实现百度文档那样的展示方式,自己在网上搜了很多关于该方面的技术,总结一下:
工具:openoffice(该工具可以将doc,excel等文件转化成pdf文件) swftools(该工具则是将pdf文件转换成swf文件)
flexpaper(该工具则是用于在jsp界面中编写实现文档的展示) xpdf-chinese-simplified(语言包,pdf转化swf时不会乱码)
jodconverter-core-3.0-beta-4(编码实现doc,execl转换成pdf时要导入的jar包) 步骤:
在安装这些工具之前首先要有相应的支持环境。包括jdk,如果是linux还要安装gcc环境。 ①首先安装openoffice。
在windows下安装2013-10-18_Apache_OpenOffice_4.0.1_Win_x86_install_zh-CN.exe(这个就不详细叙述,记住安装路径)
在linux安装Apache_OpenOffice_incubating_3.4.1_Linux_x86-64_install-rpm_zh-CN.tar.gz [root~]# tar xf Apache_OpenOffice_incubating_3.4.1_Linux_x86-64_install-rpm_zh-CN.tar.gz [root~]# cd zh-CN [root~]# cd RPMS [root~]#rpm -ivh *.rpm
进入安装目录 (记录好安装路径) [root~]#cd /opt/openoffice/program
执行命令:soffice-headless -accept=\②安装swftools工具。
在windows下直接安装swftools-0.9.0.exe,安装成功后打开cmd,输入pdf2swf看是否安装成功
在linux安装swftools要准备两个工具包(freetype-2.4.8.tar.gz,jpegsrc.v8c.tar.gz) tar -xzvf freetype-2.4.8.tar.gz cd freetype-2.4.8 ./configure make
make install
tar -xzvf jpegsrc.v8c.tar.gz cd jpeg-8c ./configure make
make install
接下来安装swftools-2013-04-09-1007.tar.gz tar -xzvf swftools-2013-04-09-1007.tar.gz cd swftools-2013-04-09-1007
ldconfig /usr/local/lib //这一步很重要,不然会报错 ./configure make
make install
提示:在安装swftools工具时除了gcc环境,还需要zlib-devel,libjpeg-devel,giflib-devel。 (例如没有zlib-devel,在./configure的步骤中则会报错you need zlib to compile swftools)
可以通过输入rpm -qa zlib-devel来查看是否安装,如果没有输入yum install zlib-devel
如果报错no pakage zlib-devel avaliable 则需要手动去网上下载一个zlib-devel-1.2.3-141.1.x86_64.rpm(看清楚linux是32位还是64位)安装好
其他环境可以按照该步骤一一搭建好 环境搭建好后再按照上述重新安装swftools工具 安装好了后输入pdf2swf可以检测是否安装成功
③java编程实现doc--->pdf--->swf
首先将jodconverter-core-3.0-beta-4中的jodconverter-core-3.0-beta-4.jar导入到工程下话不多说贴代码
private DefaultOfficeManagerConfiguration getConverter(String OpenOffice_HOME){ DefaultOfficeManagerConfiguration configurate = new DefaultOfficeManagerConfiguration();
configurate.setOfficeHome(OpenOffice_HOME); configurate.setPortNumber(8100);
configurate.setTaskExecutionTimeout(10000*60*5L); configurate.setTaskQueueTimeout(1000*60*60*24L); return configurate; }
//该方法是将doc文件转换成pdf文件,sourceFile是doc源文件,destFile是pdf目标文件 public int office2PDF(String sourceFile,String destFile){ OfficeManager officeManager = null; try{
File inputFile = new File(sourceFile); if(!inputFile.exists()){ return -1; }
File outputFile = new File(destFile);
//OpenOffice_HOME 就是openoffice安装路径,我是用配置文件进行管理 如openOffice_home=C\\:\\\\Program Files (x86)\\\\OpenOffice 4 String OpenOffice_HOME = PropertiseUtils.getInstance().getProperties(\ log.info(\为\
officeManager = getConverter(OpenOffice_HOME).buildOfficeManager(); officeManager.start(); OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
converter.convert(inputFile, outputFile); return 0; }catch(Exception e){
log.info(\转pdf出错了\ e.printStackTrace(); return -1; }finally{
if(officeManager != null){ officeManager.stop(); //该连接一定要记得关 } } }
//该方法是将pdf文件转换为swf文件,sourceFile为pdf源文件,destFile为swf目标文件 public int pdf2Swf(String sourceFile,String destFile){ Runtime exe = Runtime.getRuntime(); InputStream is = null; BufferedReader br = null; try {
String os = PropertiseUtils.getInstance().getProperties(\
String languagedir = PropertiseUtils.getInstance().getProperties(\//这个是存放xpdf-chinese-simplified语言包的路径
String c = \9 -s poly2bitmap -s zoom=150 -s flashversion=9\
Process p = null;
log.info(\该系统的操作系统为\执行的命令行为\ if(\
p=exe.exec(\ }else if(\ p=exe.exec(c); }else{
log.info(\暂时支持windows和linux操作系统\ }
is = p.getInputStream();
br = new BufferedReader(new InputStreamReader(is)); String s_ = null;
StringBuffer sb = new StringBuffer(); while((s_ = br.readLine())!=null){ sb.append(s_); }
System.out.println(sb.toString()); } catch (IOException e) {
log.info(\转换swf出错了\ e.printStackTrace(); return -1; } finally{ try {
if(null != br){ br.close(); }
if(null != is){ is.close(); }
} catch (IOException e) { } }
return 0; }
通过程序将doc-->pdf-->swf
④通过flexpaper组件将swf文件在页面上展示 导入flexpaper_flash.js,FlexPaperViewer.swf var fp = new FlexPaperViewer(
'${basePath}scripts/flexpaper/Paper',
//这个用的Paper.swf自己写的 ${basePath}scripts/flexpaper/FlexPaperViewer 'viewerPlaceHolder', { config : {
SwfFile : encodeURI('${swf_filepath}'),
//swf文件存放路径 编码防止乱码找不到中文文件 Scale : 0.6,
ZoomTransition : 'easeOut', ZoomTime : 1, ZoomInterval : 0.4, FitPageOnLoad : false, FitWidthOnLoad : false, PrintEnabled : true,
FullScreenAsMaxWindow : false, ProgressiveLoading : false, MinZoomSize : 0.4, MaxZoomSize : 5, EncodeURI : true,
SearchMatchAll : false, InitViewMode : 'Portrait', ViewModeToolsVisible : true, ZoomToolsVisible : true, NavToolsVisible : true, CursorToolsVisible : true, SearchToolsVisible : true,
localeChain: 'zh_CN' }}); }
html: