您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > Java实现文档在线阅读
Java平台要实现类似豆丁百度文科的文档在线阅读,总体思路是讲docdocx等文件格式利用openoffice转换成pdf再用swftools转为swf。再用flexpaper组件显示swf。此过程涉及软件(实测)openoffice3.2(window)swftools-2011-01-23-1815.exe(window)openoffice3.1.1(linux)swftools-2011-01-23-1815.tar.gz(linux)jar包jodconverter-2.2.2(里面lib目录下含多个要用到的jar文件)flexpaper1.4.0(直接复制过来,项目上运行成功,本地运行还没成功)FlexPaper_1.4.5_flash(网上下载的最新版本没试过,二选一即可)附上自己写的java转换DemoDocConverter.javaimportjava.io.BufferedInputStream;importjava.io.File;importjava.io.IOException;importjava.io.InputStrem;importcom.artofsolving.jodconverter.DocumentConverter;importcom.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;importcom.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;importcom.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;/***docdocx格式转换*@authorAdministrator**/publicclassDocConverter{privatestaticfinalintenvironment=1;//环境1:windows2:linux(只涉及pdf2swf路径问题)privateStringfileString;privateStringoutputPath=;//输入路径,如果不设置就输出在默认的位置privateStringfileName;privateFilepdfFile;privateFileswfFile;privateFiledocFile;publicDocConverter(StringfileString){ini(fileString);}/***重新设置file*@paramfileString*/publicvoidsetFile(StringfileString){ini(fileString);}/***初始化*@paramfileString*/privatevoidini(StringfileString){this.fileString=fileString;fileName=fileString.substring(0,fileString.lastIndexOf(.));docFile=newFile(fileString);pdfFile=newFile(fileName+.pdf);swfFile=newFile(fileName+.swf);}/***转为PDF*@paramfile*/privatevoiddoc2pdf()throwsException{if(docFile.exists()){if(!pdfFile.exists()){OpenOfficeConnectionconnection=newSocketOpenOfficeConnection(8100);try{connection.connect();DocumentConverterconverter=newOpenOfficeDocumentConverter(connection);converter.convert(docFile,pdfFile);//closetheconnectionconnection.disconnect();System.out.println(****pdf转换成功,PDF输出:+pdfFile.getPath()+****);}catch(java.net.ConnectExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();System.out.println(****swf转换器异常,openoffice服务未启动!****);throwe;}catch(com.artofsolving.jodconverter.openoffice.connection.OpenOfficeExceptione){e.printStackTrace();System.out.println(****swf转换器异常,读取转换文件失败****);throwe;}catch(Exceptione){e.printStackTrace();throwe;}}else{System.out.println(****已经转换为pdf,不需要再进行转化****);}}else{System.out.println(****swf转换器异常,需要转换的文档不存在,无法转换****);}}/***转换成swf*/privatevoidpdf2swf()throwsException{Runtimer=Runtime.getRuntime();if(!swfFile.exists()){if(pdfFile.exists()){if(environment==1){//windows环境处理try{Processp=r.exec(D:/TOOLS/SWFTools/pdf2swf.exe+pdfFile.getPath()+-o+swfFile.getPath()+-T9);System.out.print(loadStream(p.getInputStream()));System.err.print(loadStream(p.getErrorStream()));System.out.print(loadStream(p.getInputStream()));System.err.println(****swf转换成功,文件输出:+swfFile.getPath()+****);if(pdfFile.exists()){pdfFile.delete();}}catch(IOExceptione){e.printStackTrace();throwe;}}elseif(environment==2){//linux环境处理try{Processp=r.exec(pdf2swf+pdfFile.getPath()+-o+swfFile.getPath()+-T9);System.out.print(loadStream(p.getInputStream()));System.err.print(loadStream(p.getErrorStream()));System.err.println(****swf转换成功,文件输出:+swfFile.getPath()+****);if(pdfFile.exists()){pdfFile.delete();}}catch(Exceptione){e.printStackTrace();throwe;}}}else{System.out.println(****pdf不存在,无法转换****);}}else{System.out.println(****swf已经存在不需要转换****);}}staticStringloadStream(InputStreamin)throwsIOException{intptr=0;in=newBufferedInputStream(in);StringBufferbuffer=newStringBuffer();while((ptr=in.read())!=-1){buffer.append((char)ptr);}returnbuffer.toString();}/***转换主方法*/publicbooleanconver(){if(swfFile.exists()){System.out.println(****swf转换器开始工作,该文件已经转换为swf****);returntrue;}if(environment==1){System.out.println(****swf转换器开始工作,当前设置运行环境windows****);}else{System.out.println(****swf转换器开始工作,当前设置运行环境linux****);}try{doc2pdf();pdf2swf();}catch(Exceptione){//TODOAuto-generatedcatchblocke.printStackTrace();returnfalse;}if(swfFile.exists()){returntrue;}else{returnfalse;}}/***返回文件路径*@params*/publicStringgetswfPath(){if(swfFile.exists()){StringtempString=swfFile.getPath();tempString=tempString.replaceAll(\\\\,/);returntempString;}else{return;}}/***设置输出路径*/publicvoidsetOutputPath(StringoutputPath){this.outputPath=outputPath;if(!outputPath.equals()){StringrealName=fileName.substring(fileName.lastIndexOf(/),fileName.lastIndexOf(.));if(outputPath.charAt(outputPath.length())=='/'){swfFile=newFile(outputPath+realName+.swf);}else{swfFile=newFile(outputPath+realName+.swf);}}}publicstaticvoidmain(Strings[]){DocConverterd=newDocConverter(D:/data/FTP/midlongforecast/midweatherforecast/20010202.xml);d.conver();}}以上即是所有用到的转换需要用到的文件windows安装过程省略,linux下安装swftools命令解压到目录后./configuremakemakeinstall无论在哪个平台安装完以上两个软件后需要在将openoffice以服务方式启动Window启动方式cdC:\ProgramFiles\OpenOffice.org3\programsoffice-headless-accept=socket,host=127.0.0.1,port=8100;urp;–nofirststartwizardLinux启动soffice-headless-accept=socket,host=127.0.0.1,port=8100;urp;-nofirststartwizard&以上是实现两个平台下的转换,但是会有openoffice解析不了的字体乱码问题,或者显示字体变形等更高级的web文档应用可以参考QQ邮件,邮件实现了在线预览exceldocpdf等格式文件并可以用鼠标点击选
本文标题:Java实现文档在线阅读
链接地址:https://www.777doc.com/doc-2880923 .html