zoukankan      html  css  js  c++  java
  • 仿百度文库解决方案(四)——利用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

      转载说明本文系作者原创,转载时请注明文章出处:肖恩也有梦想 博客园,请尊重作者的劳动成果,谢谢!

  • 相关阅读:
    io学习三
    io学习二
    io学习一
    多线程学习(十五)
    spring源码阅读(四)
    多线程学习(十四)
    多线程学习(十三)
    设计模式(一)
    spring源码阅读(三)
    spring源码阅读(二)
  • 原文地址:https://www.cnblogs.com/luckyxiaoxuan/p/2549012.html
Copyright © 2011-2022 走看看