`

JODConverter]word转pdf心得分享(转)

 
阅读更多

官方网站:    http://www.artofsolving.com/opensource/jodconverter 

下载地点: 
  http://www.artofsolving.com/opensource/jodconverter 
  http://zh.openoffice.org/new/zh_tw/downloads.html 
  目前版本: JODConverter v2.2.1, OpenOffice v3.0.0 
  使用需求: JDK1.4以上, 安装OpenOffice v2.0.3以上 


  基本简介: 
  
JODConverter主要的功能是用来做各种档案的转换. 目前测试过, Word,Excel,PowerPoint转PDF都是没问题的. 
  因为JODConverter是透过OpenOffice来做转换, 所以使用前需要先安装OpenOffice, 并且将OpenOffice的Service启动, 才可以使用. 

OpenOffice.org 具有一个鲜为人知的特性就是其能够作为一个服务来运行,而这种能力具有一定的妙用。举例来说,你可以把openoffice.og变成一个转换引擎,利用 这种转换引擎你可以通过网络接口或命令行工具对文件的格式进行转换,JODConverter可以帮助你实现OpenOffice.org的这种文件转换 功能。

为了将OpenOffice.org作为一个转换引擎,你必须以服务的方式将它启动,使它在某个特定的端口监听连接,在Linux平台你可以用如下的命令启动openoffice.org:
soffice -headless -accept=”socket,port=8100;urp;”(我在linux下使用
soffice -headless -accept=”socket,host=127.0.0.1,port=8100;urp;”,open office server是开启来了,但是文件转换不成功,异常是连接失败,这个很可以是你用jodconverter来转换时使用的是localhost,而当你的 机有host配置文件里没有将localhost与127.0.0.1对应起来时,就无法解析了,这里可以修改host文件或去掉 host=127.0.0.1,这样我试过可以成功 )

在Windows平台, 使用如下命令:
“C:\Program Files\OpenOffice.org 2.2\program\soffice” -accept=”socket,port=8100;urp;”

  使用教学: 
  Step1: 安装OpenOffice 
  Step2: 启动OpenOffice Service 


    

     1 cd C:\Program Files\OpenOffice.org 3\program 

   2 soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard 

  Step3:将JODConverter的Jar档放进专案中的Library, 请检查你的专案是否包含以下的Jar档: 

  jodconverter-2.2.1.jar 
  jurt-2.3.0.jar 
  xstream-1.2.2.jar 
  ridl-2.3.0.jar 
  commons-io-1.3.1.jar 
  juh-2.3.0.jar 
  slf4j-api-1.4.3.jar 
  unoil-2.3.0.jar 
  slf4j-jdk14-1.4.3.jar 

  Step4: 准备一个word档放在c:/document.doc 
  Step5: 执行以下程式 


Java代码  收藏代码
  1. <span style= "font-size: medium;" > import  java.io.File;   
  2.   
  3.   import  com.artofsolving.jodconverter.DocumentConverter;   
  4.   
  5.   import  com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;   
  6.   
  7.   import  com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;   
  8.   
  9.   import  com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;   
  10.   
  11.   public   class  JodDemo {   
  12.   
  13.   public   static   void  main(String[] args)  throws  Exception{   
  14.   
  15.   File inputFile = new  File( "c:/document.doc" );   
  16.   
  17.   File outputFile = new  File( "c:/document.pdf" );   
  18.   
  19.   // connect to an OpenOffice.org instance running on port 8100    
  20.   
  21.   OpenOfficeConnection connection = new  SocketOpenOfficeConnection( 8100 );   
  22.   
  23.   connection.connect();   
  24.   
  25.   // convert    
  26.   
  27.   DocumentConverter converter = new  OpenOfficeDocumentConverter(connection);   
  28.   
  29.   converter.convert(inputFile, outputFile);   
  30.   
  31.   // close the connection    
  32.   
  33.   connection.disconnect();   
  34.   
  35.   }   
  36.   
  37.   } </span>  

  程式说明: 

  程式的部份相当简洁, 特别要注意的地方是第12行连线的port必须与你启动OpenOffice的Port相同, 
  另外JODConverter预设是用副档名作文件种类的判断, 所以副档名必须要正确才行. 
    如果副档名比较特别的话, 就必须在convert()的时候强制指定Document Type. 

心得: 
  JODConverter使用起来相当方便, 官网也提供War档让JODConverter变成Web Service提供给不同的语言来呼叫. 
  特别要注意的是, OpenOffice Service并不是ThreadSafe的, 多个Web AP在使用的时候必须要注意. 



那我也來補充一些好了 
之前也在試這個檔案轉換的程式 
程式最好加上 try-catch 
因為之前发現有些檔案 format 不能转,发生 Exception 后,connection 不會自动切断,程序会hand 住 
所以改成如下方式: 


Java代码  收藏代码
  1. <span style= "font-size: medium;" > public   void  convert(String input, String output){   
  2.         File inputFile = new  File(input);   
  3.         File outputFile = new  File(output);   
  4.         OpenOfficeConnection connection = new  SocketOpenOfficeConnection( 8100 );   
  5.         try  {   
  6.             connection.connect();   
  7.             DocumentConverter converter = new  OpenOfficeDocumentConverter(connection);   
  8.             converter.convert(inputFile, outputFile);   
  9.         } catch (Exception e) {   
  10.             e.printStackTrace();   
  11.         } finally  {   
  12.             try if (connection !=  null ){connection.disconnect(); connection =  null ;}} catch (Exception e){}   
  13.         }   
  14.     } </span>  


再來,明明就是 open office 的檔案,卻生不能轉換的問題。例如:*.STW, *.SXD, *.ODF 等,後來才知道可以自行指定來源檔和輸出檔的 mime-type,程式如下: 


Java代码  收藏代码
  1. <span style= "font-size: medium;" > public   void  convertSTW(String input, String output){   
  2.         DocumentFormat stw = new  DocumentFormat( "OpenOffice.org 1.0 Template" , DocumentFamily.TEXT,  "application/vnd.sun.xml.writer" "stw" );   
  3.         DefaultDocumentFormatRegistry formatReg = new  DefaultDocumentFormatRegistry();   
  4.         DocumentFormat pdf = formatReg.getFormatByFileExtension("pdf" );   
  5.         File inputFile = new  File(input);   
  6.         File outputFile = new  File(output);   
  7.         OpenOfficeConnection connection = new  SocketOpenOfficeConnection( 8100 );   
  8.         try  {   
  9.             connection.connect();   
  10.             DocumentConverter converter = new  OpenOfficeDocumentConverter(connection);   
  11.             converter.convert(inputFile, stw, outputFile, pdf);   
  12.         } catch (Exception e) {   
  13.             e.printStackTrace();   
  14.         } finally  {   
  15.             try if (connection !=  null ){connection.disconnect(); connection =  null ;}} catch (Exception e){}   
  16.         }   
  17.     } </span>  

上面的程式是轉換 STW 到 PDF,如果是 SXD / ODF 則只需要變更 DocumentFormat 的內容即可。 


Java代码  收藏代码
  1. <span style= "font-size: medium;" >DocumentFormat sxd =  new  DocumentFormat( "OpenOffice.org 1.0 Drawing" , DocumentFamily.DRAWING,  "application/vnd.sun.xml.sraw" "sxd" );   
  2.   
  3. DocumentFormat odf = new  DocumentFormat( "OpenDocument Math" , DocumentFamily.TEXT,  "application/vnd.oasis.opendocument.formula" "odf" ); </span>  

  所 有 default support 的 DocumentFormat 都在 com.artofsolving.jodconverter.DefaultDocumentFormatRegistry 裡,但並非所有 open office 支援的 file format 都有,所以要像上面的方法自行去定义 DocumentFormat, 至 于它里面的参数可以从jodconverter-2.2.2.jar包的com.artofsolving.jodconverter包下的 document-formats.xml文件里面得到,这样就可以完成多种格式的转换,如open office,ms office , wps office及所有的纯文本文件。


在此獻給所有需要作 File Convert 的人試試。 
免錢的,最好用。還有 source code 可以自己改。

分享到:
评论
1 楼 wanggang0321 2016-04-22  
亲,我在pptx(office2007以上版本)转pdf的时候,遇到个问题,如果演示文档中某一页的文字过多,那么这一页的内容转换为pdf后,pdf不能显示全部的文字,会丢失一部分文字

相关推荐

Global site tag (gtag.js) - Google Analytics