仿百度文庫解決方案(四)——利用JODConverter調用OpenOffice.org服務轉換文檔為PDF


目錄

仿百度文庫解決方案(一)——總體思路

仿百度文庫解決方案(二)——利用Jacob調用MS Office轉換文檔為PDF

仿百度文庫解決方案(三)——利用JCom調用MS Office或者Acrobat API轉換文檔為PDF

仿百度文庫解決方案(四)——利用JODConverter調用OpenOffice.org服務轉換文檔為PDF

仿百度文庫解決方案(五)——利用SWFTools轉換PDF文檔為SWF

仿百度文庫解決方案(六)——利用FlexPaper顯示Flash(SWF)

 

1. JODConverter簡介

  JODConverter,是一個Java的OpenDocument文件轉換器,可以進行許多文件格式的轉換。它依賴於OpenOffice.org或者LibreOffice提供的服務來進行轉換,它能將Microsoft Office文檔(Word,Excel,PowerPoint)轉換為PDF格式。

  你可以將JODConverter內嵌在Java應用程序里,也可以單獨作為命令行由腳本調用,更可以應用為網頁程序或者Web Service以供網絡應用。

(1)     轉換文檔范例:

View Code
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 實現代碼

View Code
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 = new OfficeDocumentConverter(officeManager);
        converter.convert(new File(inputFile),new File(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 void stopService(){
          System.out.println("關閉office轉換服務....");
            if (officeManager != null) {
                officeManager.stop();
            }
            System.out.println("關閉office轉換成功!");
    }
}

 

注:

  源代碼下載地址:DocConverter

  轉載說明本文系作者原創,轉載時請注明文章出處:肖恩也有夢想 博客園,請尊重作者的勞動成果,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM