JODConverter 简单介绍

时间:2024-01-29 19:28:51

1. JODConverter简介

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

  你可以将JODConverter内嵌在Java应用程序里,也可以单独作为命令行由脚本调用,更可以应用为网页程序或者Web Service以供网络应用。

(1)     转换文档范例:

 
OfficeManager officeManager = new DefaultOfficeManagerConfiguration( ).buildOfficeManager( ); 
//启动OpenOffice服务 
officeManager.start( ); 
//执行转换
OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager); converter.convert(new File(“test.odt”), new File(“test.pdf”)); 
//停止服务
officeManager.stop( );
 

(2)     主要类说明:

  OfficeManager是一个接口,主要定义了三个方法:

  • public void start( )启动OpenOffice服务
  • public void stop( )停止OpenOffice服务
  • public void execute(OfficeTask task)执行转换任务

  DefaultOfficeManagerConfiguration是一个实现了OfficeManager接口的实体类,其提供了相关方法配置OpenOffice.org,比如:

  public DefaultOfficeManagerConfiguration setOfficeHome(String officeHome)设置OpenOffice.org或者LibreOffice安装目录,windows下默认值为” C:\Program Files\OpenOffice.org 3”(LibreOffice进行相应更改),因此如果OpenOffice.org安装在别的目录,必须设置此项。

  public DefaultOfficeManagerConfiguration setConnectionProtocol(OfficeConnectionProtocol conn)设置连接协议,确定使用管道通信,还是socekt通信。

  pubcli DefaultOfficeManagerConfiguration setTemplateProfileDir(File templateProfileDir)设定临时目录。

  除以上几个方法之外,DefaultOfficeManagerConfiguration还提供了别的配置OpenOffice.org的方法,具体方法可以查询JODConverter API手册。配置完之后,必须要执行方法buildOfficeManager(),实现真正的配置。

  OfficeDocumentConverter中主要包含convert方法,该方法实际上调用的是实现OfficeManager接口的类中的execute方法。

2. 利用JODConverter转化文档为PDF格式实现

 2.1 算法设计

  算法流程图如图4-1所示:

JODConverter调用OpenOffice服务转换文档为PDF算法

图4-1 JODConverter调用OpenOffice服务转换文档为PDF算法

  第一步,启动OpenOffice服务。例如,首先设定DefaultOfficeManagerConfiguration相关参数来配置OpenOffice,并得到OfficeManager。调用OfficeManager实现类的start方法启动服务。

  第二步,转换文档。例如,初始化OfficeDocumentConverter,调用其convert方法执行转换。

  第三步,停止OpenOffice服务。例如,调用OfficeManager实现类的stop方法停止方法。

 2.2 安装配置

  JODConverter是一个开源文档转换工具,既可以应用于Linux平台,也可其应用于Windows平台。其基于OpenOffice.org或者LibreOffice。因此,文档转换服务器上必须安装有OpenOffice或者LibreOffice。

  目前最新版本的JODConverter为JODConverter3.0,它要求JDK1.5以上的Java环境,同时还需要OpenOffice.org 3.x版本。本文基于最新版本3.0设计实现,如果是版本为2,则有不同的实现。(版本2需要手动启动OpenOffice.org服务,或者创建Windows服务设置为开机启动,而版本3提供了开启服务的接口,因此笔者用的是版本3)

 2.3 实现代码


package com.converter.pdfConverter; 

import java.io.File; 
import java.io.FileNotFoundException; 
import org.artofsolving.jodconverter.OfficeDocumentConverter; 
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration; 
import org.artofsolving.jodconverter.office.OfficeManager; 
import com.converter.utils.FileUtils; 

public class OpenOfficePDFConverter implements PDFConverter{ 
    private static OfficeManager officeManager; 
    private static String OFFICE_HOME = "D:\\Program Files\\OpenOffice.org 3"; 
    private static int port[] = {8100}; 
    
    public void convert2PDF(String inputFile, String pdfFile) {
        if(inputFile.endsWith(".txt")){ 
            String odtFile = FileUtils.getFilePrefix(inputFile)+".odt"; 
            if(new File(odtFile).exists()){ 
                System.out.println("odt文件已存在!"); 
                inputFile = odtFile; 
                
            }
            else{ 
                try { 
                    FileUtils.copyFile(inputFile,odtFile); 
                    inputFile = odtFile; 
                    
                } 
                catch(FileNotFoundException e) { 
                    System.out.println("文档不存在!"); 
                    e.printStackTrace(); 
                    
                } 
                
            } 
            
        } 
        startService(); 
        System.out.println("进行文档转换转换:" + inputFile + " --> " +pdfFile); 
        OfficeDocumentConverter converter = newOfficeDocumentConverter(officeManager); 
        converter.convert(new File(inputFile),newFile(pdfFile)); 
        stopService(); System.out.println(); 
        
    } 
    
    public void convert2PDF(String inputFile) { 
        String pdfFile = FileUtils.getFilePrefix(inputFile)+".pdf"; 
        convert2PDF(inputFile,pdfFile); 
        
    } 
    
    public static void startService(){ 
        DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration(); 
        try { 
            System.out.println("准备启动服务...."); 
            configuration.setOfficeHome(OFFICE_HOME);
            //设置OpenOffice.org安装目录
            configuration.setPortNumbers(port); 
            //设置转换端口,默认为8100
            configuration.setTaskExecutionTimeout(1000 * 60 * 5L);
            //设置任务执行超时为5分钟
            configuration.setTaskQueueTimeout(1000 * 60 * 60 * 24L);
            //设置任务队列超时为24小时
            officeManager = configuration.buildOfficeManager(); officeManager.start(); 
            //启动服务
            System.out.println("office转换服务启动成功!"); 
            
        } 
        catch (Exception ce) { 
            System.out.println("office转换服务启动失败!详细信息:" + ce); 
            
        } 
        
    } 
    
    public static voidstopService(){ 
        System.out.println("关闭office转换服务...."); 
        if (officeManager != null) { 
            officeManager.stop(); 
            
        } 
        System.out.println("关闭office转换成功!"); 
        
    } 
}

 

转自新浪微博:  http://blog.sina.com.cn/s/blog_6d762c870101avdu.html

 

其他参考材料: 

http://nopainnogain.iteye.com/blog/819432

http://www.bitsandpix.com/entry/java-jodconverter-3x-getting-started/