使用SSH实现在线文档阅读(类似百度文库)最近在项目中需要用到像百度文库一样的可以用来在线阅读的形式,由于大部分的文件都是doc,xls和ppt,经过多方查找,明白了大概的实现原理就是:先将office文件转化为pdf,然后将所得到的pdf文件转化为swf格式的文件,最后在页面上通过FlexPaper来查看所得到的swf文件。基本过程的如下:一、所用的工具:工具OpenOffice://sourceforge.net/projects/jodconverter/files/Swftools://flexpaper.devaldi.com/下载完后,需要安装OpenOffice和Swftools两个文件,文件安装路径最好不要有中文和空格!然后将JodConverter压缩包中lib目录下的jar包,全部复制进项目中的lib包下即可。安装完OpenOffice后必须开启OpenOffice服务,有以下几种方法开启:第一种:以命令的方式开启openoffice的服务在cmd命令下,cdopeonofiice的安装路径/program如:[plain]viewplaincopyprint?1.cdc:\programfiles\openoffice.org3\programsoffice-headless-accept=socket,host=127.0.0.1,port=8100;urp;第二种:系统开启openoffice的服务在系统开启openoffice的服务我们还需要一个WindowsResourceKittools,将openofficeserver设为系统服务。WindowsResourceKittools是微软专为管理人员、开发人员和高级用户开发的,包括管理活动目录、组策略、TCP/IP网络、注册表、系统安全、监测等涉及WindowsServer2003操作系统的其它很多方面的非常规安装的工具组件。ResourceKitToolsforXP的发布使得XP用户也能使用ResourceKitTools对这些问题进行处理。下载windowsresourcekittools,我们进行默认安装。1.打开WindowsResourceKitTools在CommandShell执行以下命令:[plain]viewplaincopyprint?1.C:\ProgramFiles\WindowsResourceKits\Tools\instsrvOpenOfficeUnoServerC:\ProgramFiles\WindowsResourceKits\Tools\srvany.exe打开管理工具-服务可以找到以OpenOfficeUnoServer命名的服务2.打开注册表寻找以下路径HKEY_LOCAL_MACHINE-SYSTEM-ControlSet001-Services-OpenOfficeUnoServer新建项Parameters,在该项下添加两个字符串值:key:Applicationvalue:C:\ProgramFiles\OpenOffice.org3\program\soffice.exekey:AppParametersvalue:-invisible-headless-accept=socket,host=127.0.0.1,port=8100;urp;-nofirststartwizard3.在服务控制台,启动openoffice服务4.在CMD中用以下命令查看8100是否已被监听:netstat-anoptcp这样OpenOffice3.0就以服务方式运行在Windows系统上了。(使用cmd命令:netstat-anptcp查看8100端口是否工作)然後可以通过socket方式连接openOffice,以使用openoffice提供的某些服务,如文件转换服务,msoffice转pdf等等。开源项目JODConverter就是结合openoffice来进行文档转换的java组件。另外有一个命令行工具swftools,该工具可以将pdf转换为swf格式的文档,提供给ie客戶端流览。另外,我们可以将该配置用bat文件来快速实现,运行前请先修改相应目录参数:openofficeservice.bat文件C:\ProgramFiles\WindowsResourceKits\Tools\instsrvOpenOfficeUnoServerC:\ProgramFiles\WindowsResourceKits\Tools\srvany.exeregaddHKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\OpenOfficeUnoServer\Parameters/ve/dregaddHKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\OpenOfficeUnoServer\Parameters/vApplication/tREG_SZ/dC:\ProgramFiles\OpenOffice.org3\program\soffice.exeregaddHKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\OpenOfficeUnoServer\Parameters/vAppParameters/tREG_SZ/d-invisible-headless-accept=socket,host=127.0.0.1,port=8100;urp;-nofirststartwizard这两种方法都比较麻烦,而且每次如果是手动开启命令的话很不方便。所以有了第三种方案:通过java代码开启服务,这个方法主要是在进行转换文档时自动开启OpenOpenoffice的服务,转换完成后自动关闭。第三种方案:java代码开启服务java代码开启服务主要的是在转换文档的过程中每次转换之前先进行startserveice,执行转换,stopservice。主要的代码将在后面的实例中列出!二、代码演示:(1)由于项目中需要转换的地方不只一处,所以将需要转换的代码写成了一个帮助类如下:[plain]viewplaincopyprint?1.importjava.io.BufferedInputStream;2.importjava.io.File;3.importjava.io.IOException;4.importjava.io.InputStream;5.6.importcom.artofsolving.jodconverter.DocumentConverter;7.importcom.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;8.importcom.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;9.importcom.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;10.11.12./**13.*office文档格式转换14.*15.*@authorAdministrator16.*17.*/18.publicclassDocConverter{19.privatestaticfinalintenvironment=1;//环境1:windows2:linux20.privateStringfileString;//源文件的路径21.privateStringoutputPath=D:/javaserve/tomcat/apache-tomcat-7.0.32/webapps/jingpinkecheng/flexpaper/file;//输出路径,如果不设置就输出在默认的位置(与源文件位置相同)22.privateStringopenoffice_home=D:/ProgramFiles/OpenOffice.org3;//这里是OpenOffice的安装目录23.privateStringpdf2swf_home=E:/javaserver/swftools/pdf2swf.exe;//pdf2swf的安装路径24.privateStringfileName;25.privateFileofficeFile;//office文件26.privateFilepdfFile;//转成的pdf文件27.privateFileswfFile;//转成的swf文件28.29.30.publicDocConverter(StringfileString){31.//this.swfFile=swfFile;32.ini(fileString);33.}34.35./**36.*在调用转换类的时候将输出路径、OpenOffice的安装路径、pdf2swf的路径都设置好,若路径都一样,可直接在属性上设置更方便37.*@paramfileString38.*@paramoutputPath39.*@paramOpenOffice_Home40.*@parampdf2swf_home41.*/42.publicDocConverter(StringfileString,StringoutputPath,Stringopenoffice_home,Stringpdf2swf_home){43.this.outputPath=outputPath;44.this.openoffice_home=openoffice_home;45.this.pdf2swf_home=pdf2swf_home;46.ini(fileString);47.}48.49./**50.*重新设置file51.*52.*@paramfileString53.*/54.publicvoidsetFile(StringfileString){55.ini(fileString);56.}57.58./**59.*初始化60.*61.*@paramfileString62.*/63.privatevoidini(StringfileString){64.this.fileString=fileString;65.fileName=fileString.substring(0,fileString.lastIndexOf(.));66.officeFile=newFile(fileString);67.pdfFile=newFile(fileName+.pdf);68.setOutputPath(outputPath);69.70.}71.72./**73.*转为PDF74.*75.*@paramfile76.*/77.privatevoiddoc2pdf()throwsException{78.if(officeFile.exists()){79.if(!pdfFile.exists()){80.81.//如果从文件中读取的URL地址最后一个字符不是'\',则添加'\'82.if(openoffice_home.charAt(openoffice_home.length()-1)!='\\'){83.openoffice_home+=\\;84.}85.86.//使用java启动OpenOffice的服务87.Stringcommand=openoffice_home88.+program\\soffice.exe-headless