jodconverter 远程配置_仿百度文库解决方案之四:JODConverter调用转换

1. JODConverter简介

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

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

(1)     转换文档范例:

OfficeManager officeManager =newDefaultOfficeManagerConfiguration( ).buildOfficeManager( );

//启动OpenOffice服务

officeManager.start( );

//执行转换

OfficeDocumentConverter converter =newOfficeDocumentConverter(officeManager);

converter.convert(newFile(“test.odt”),newFile(“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所示:

图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 实现代码

packagecom.converter.pdfConverter;

importjava.io.File;

importjava.io.FileNotFoundException;

importorg.artofsolving.jodconverter.OfficeDocumentConverter;

importorg.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;

importorg.artofsolving.jodconverter.office.OfficeManager;

importcom.converter.utils.FileUtils;

publicclassOpenOfficePDFConverterimplementsPDFConverter{

privatestaticOfficeManager officeManager;

privatestaticString OFFICE_HOME ="D:\\Program Files\\OpenOffice.org 3";

privatestaticintport[] = {8100};

publicvoidconvert2PDF(String inputFile, String pdfFile) {

if(inputFile.endsWith(".txt")){

String odtFile = FileUtils.getFilePrefix(inputFile)+".odt";

if(newFile(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(newFile(inputFile),newFile(pdfFile));

stopService();

System.out.println();

}

publicvoidconvert2PDF(String inputFile) {

String pdfFile = FileUtils.getFilePrefix(inputFile)+".pdf";

convert2PDF(inputFile,pdfFile);

}

publicstaticvoidstartService(){

DefaultOfficeManagerConfiguration configuration =newDefaultOfficeManagerConfiguration();

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);

}

}

publicstaticvoidstopService(){

System.out.println("关闭office转换服务....");

if(officeManager !=null) {

officeManager.stop();

}

System.out.println("关闭office转换成功!");

}

}

【编辑推荐】

【责任编辑:张伟 TEL:(010)68476606】

点赞 0

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值