`
JavaSam
  • 浏览: 952086 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • JAVA
 
阅读更多

官方网站: 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.   import com.artofsolving.jodconverter.DocumentConverter;
  3.   import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
  4.   import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
  5.   import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
  6.   publicclass JodDemo {
  7.   publicstaticvoid main(String[] args) throws Exception{
  8.   File inputFile = new File("c:/document.doc");
  9.   File outputFile = new File("c:/document.pdf");
  10.   // connect to an OpenOffice.org instance running on port 8100
  11.   OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
  12.   connection.connect();
  13.   // convert
  14.   DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
  15.   converter.convert(inputFile, outputFile);
  16.   // close the connection
  17.   connection.disconnect();
  18.   }
  19.   } </span>
import java.io.File; 

  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; 

  public class JodDemo { 

  public static void main(String[] args) throws Exception{ 

  File inputFile = new File("c:/document.doc"); 

  File outputFile = new File("c:/document.pdf"); 

  // connect to an OpenOffice.org instance running on port 8100 

  OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100); 

  connection.connect(); 

  // convert 

  DocumentConverter converter = new OpenOfficeDocumentConverter(connection); 

  converter.convert(inputFile, outputFile); 

  // close the connection 

  connection.disconnect(); 

  } 

  } 

程式说明:

 

  程式的部份相当简洁, 特别要注意的地方是第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;">publicvoid 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>
public void convert(String input, String output){ 
        File inputFile = new File(input); 
        File outputFile = new File(output); 
        OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100); 
        try { 
            connection.connect(); 
            DocumentConverter converter = new OpenOfficeDocumentConverter(connection); 
            converter.convert(inputFile, outputFile); 
        } catch(Exception e) { 
            e.printStackTrace(); 
        } finally { 
            try{ if(connection != null){connection.disconnect(); connection = null;}}catch(Exception e){} 
        } 
    } 

 

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

 

Java代码 复制代码 收藏代码
  1. <span style="font-size: medium;">publicvoid 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>
public void convertSTW(String input, String output){ 
        DocumentFormat stw = new DocumentFormat("OpenOffice.org 1.0 Template", DocumentFamily.TEXT, "application/vnd.sun.xml.writer", "stw"); 
        DefaultDocumentFormatRegistry formatReg = new DefaultDocumentFormatRegistry(); 
        DocumentFormat pdf = formatReg.getFormatByFileExtension("pdf"); 
        File inputFile = new File(input); 
        File outputFile = new File(output); 
        OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100); 
        try { 
            connection.connect(); 
            DocumentConverter converter = new OpenOfficeDocumentConverter(connection); 
            converter.convert(inputFile, stw, outputFile, pdf); 
        } catch(Exception e) { 
            e.printStackTrace(); 
        } finally { 
            try{ if(connection != null){connection.disconnect(); connection = null;}}catch(Exception e){} 
        } 
    } 

上面的程式是轉換 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. DocumentFormat odf = new DocumentFormat("OpenDocument Math", DocumentFamily.TEXT, "application/vnd.oasis.opendocument.formula", "odf"); </span>
DocumentFormat sxd = new DocumentFormat("OpenOffice.org 1.0 Drawing", DocumentFamily.DRAWING, "application/vnd.sun.xml.sraw", "sxd"); 

DocumentFormat odf = new DocumentFormat("OpenDocument Math", DocumentFamily.TEXT, "application/vnd.oasis.opendocument.formula", "odf"); 

所有 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及所有的纯文本文件。

 


 

3
2
分享到:
评论

相关推荐

    利用jodconverter-core-3.0-beta-4实现office转pdf,同时解决excel断裂的问题

    在`Word2pdf.java`中,通常会有一个主方法,接收Office文档的路径作为输入,然后调用`jodconverter`的API将其转换为PDF。转换的基本步骤可能如下: 1. 初始化`LocalOfficeManager`,这是`jodconverter`用来连接...

    jodconverter-2.2.2.zip 利用openoffice word转pdf所需jar

    jodconverter-2.2.2.zip 利用openoffice word转pdf所需jar 使用说明:https://blog.csdn.net/weixin_40845192/article/details/104660387

    利用jodconverter-core-3.0实现office转pdf

    本篇主要介绍如何利用`jodconverter-core-3.0`库来实现Office文档(包括Word、Excel、PPT)到PDF的转换。 `jodconverter`是一个开放源码的Java库,它能够方便地将OpenDocument格式(如ODT、ODS、ODP)和Microsoft ...

    word转pdf的一些jar包

    在Word转PDF的场景中,开发者可以使用Apache POI读取Word文档内容,然后通过iText将这些内容写入PDF文件。 3. **Flying Saucer**: 这是一个Java库,能够将HTML渲染成PDF。如果Word文档被转换为HTML,Flying Saucer...

    word转PDF代码,亲测可行

    本篇文章将详细解析如何使用给定的代码实现“Word转PDF”的功能。标题提到的“word转PDF代码”实际上是一个利用Apache OpenOffice实现的解决方案,这个开源办公套件支持多种格式之间的互转。 Apache OpenOffice是一...

    纯Java实现的WORD转PDF,免费

    纯Java实现的Word转PDF解决方案,如JODConverter,提供了一种灵活且跨平台的方法来处理文档格式转换。虽然可能需要额外的配置步骤(如安装Office套件),但其免费且不受操作系统限制的特点使其成为许多开发者的首选...

    java word转pdf

    总之,通过集成JODConverter并利用OpenOffice组件,Java开发者可以在程序中轻松实现Word到PDF的转换,这一功能在企业级应用中非常实用,例如批量处理报告、文档归档等场景。确保正确配置和使用OpenOffice服务,以及...

    word、excel、ppt转pdf,spring boot小demo

    本项目是一个基于Spring Boot框架实现的实用工具,用于将Microsoft Office的三种常见文件格式——Word(.docx)、Excel(.xlsx)和PowerPoint(.pptx)转换为PDF格式。这个小Demo提供了完整的功能,无需任何水印,...

    jodconverter-2.2.2_转pdf.rar

    例如,你可以创建一个Java程序,指定输入的Word或Excel文件路径,然后设置输出的PDF文件路径,最后调用JodConverter的相关方法即可完成转换。这样的设计使得JodConverter在批量处理大量文档时表现出色,极大地提高了...

    JODConverter2.2.2 文档转换软件

    JODConverter,是一个Java的OpenDocument文件转换器,依赖于OpenOffice.org或者LibreOffice提供的服务来进行转换,它能将Microsoft Office文档(Word,Excel,PowerPoint)转换为PDF格式。

    Java使用OpenOffice将word转换为pdf文件

    本篇将重点讲解如何利用OpenOffice API在Java环境中将Word文档转换为PDF文件。 OpenOffice是一个开源的办公套件,它提供了一个称为UNO(Universal Network Objects)的接口,允许开发者通过编程方式与OpenOffice...

    java代码将word转pdf,pdf转swf 操作文档及代码

    2. **Word到PDF转换**:在Java环境中,可以利用开源库如Apache POI来读取和操作Microsoft Word(.doc或.docx)文档,然后使用转换工具如JODConverter将其转换为PDF格式。Apache POI提供了对Office文档的低级访问,而...

    word转pdf,pdf转图片jar包

    1. **Word转PDF**: 使用OpenOffice API进行Word到PDF的转换是一种常见方法。OpenOffice是一款开源的办公软件套件,它提供了API接口供开发者在程序中调用,实现对文档的读取、编辑和转换。转换过程主要包括以下步骤...

    word(office)转换PDF转swf

    本篇将详细讲解如何使用OpenOffice工具进行“Word(Office)转换PDF”以及“PDF转SWF”的过程。 首先,我们来探讨“Word(Office)转换PDF”。在日常工作中,Word文档通常用于撰写报告、论文或创建各种文本内容。...

    openoffice转pdf所需jodconverter-2.2.2

    《OpenOffice与JODConverter:实现高效PDF转换》 在信息技术领域,文件转换是一个常见的需求,尤其是将文档从一种格式转换为另一种格式。在这种背景下,OpenOffice和JODConverter成为了非常实用的工具,它们能够...

    java OpenOffice wordExcel转换PDF

    总结起来,"java OpenOffice wordExcel转换PDF"涉及的关键知识点包括Java编程、OpenOffice UNO接口、JODConverter库的使用、OpenOffice/LibreOffice的安装与配置,以及文档转换中的问题排查和性能优化。通过理解和...

    PDF转Word/Excel/PPT/HTML/Text

    - **工具**:市面上有许多PDF转Word软件,如Adobe Acrobat、在线转换网站和免费应用程序。本压缩包中的"PDF Converter"可能是一个这样的工具。 - **过程**:通常,用户只需选择待转换的PDF文件,点击转换按钮,...

    openoffice--word转PDF

    总之,OpenOffice作为一款强大的开源办公软件,提供了便捷的Word转PDF功能,使得用户在没有Microsoft Office的情况下也能轻松实现文件格式的转换。通过熟练掌握这一技巧,可以提高工作效率,尤其是在跨平台协作和...

    jodconverter 3.0-beta4 & 2.2.2 文件转PDF

    标题中的"jodconverter 3.0-beta4 & 2.2.2 文件转PDF"指的是JodConverter的两个不同版本,3.0-beta4是一个测试版,而2.2.2是较旧但相对稳定的一个版本。这两个版本都提供了将Office文档转换为PDF的功能,但3.0-beta4...

    Openoffice转换多列EXCEL为PDF行列对应解决方法

    在IT行业中,转换数据格式是常见的任务之一,特别是在办公软件的使用中,例如从Excel转换为PDF。在处理大量数据时,我们可能会遇到一个挑战:如何保持数据的原始布局不变。针对“OpenOffice转换多列EXCEL为PDF行列...

Global site tag (gtag.js) - Google Analytics