仿百度文库解决方案之四:JODConverter调用转换

来源:互联网 发布:安卓抓取网页数据 编辑:程序博客网 时间:2024/05/01 05:28
引用:http://developer.51cto.com/art/201206/343406.htm

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

AD:2013云计算架构师峰会超低价抢票中

1. JODConverter简介

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

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

(1)     转换文档范例:

  1. OfficeManager officeManager = new DefaultOfficeManagerConfiguration( ).buildOfficeManager( );  
  2. //启动OpenOffice服务  
  3. officeManager.start( );  
  4. //执行转换  
  5. OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);  
  6. converter.convert(new File(“test.odt”), new File(“test.pdf”));  
  7. //停止服务  
  8. 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 实现代码

  1. package com.converter.pdfConverter;  
  2. import java.io.File;  
  3. import java.io.FileNotFoundException;  
  4. import org.artofsolving.jodconverter.OfficeDocumentConverter;  
  5. import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;  
  6. import org.artofsolving.jodconverter.office.OfficeManager;  
  7. import com.converter.utils.FileUtils;  
  8. public class OpenOfficePDFConverter implements PDFConverter{   
  9.     private static  OfficeManager officeManager;  
  10.     private static String OFFICE_HOME = "D:\\Program Files\\OpenOffice.org 3";  
  11.     private static int port[] = {8100};  
  12.     public  void convert2PDF(String inputFile, String pdfFile) {  
  13.           
  14.         if(inputFile.endsWith(".txt")){  
  15.             String odtFile = FileUtils.getFilePrefix(inputFile)+".odt";  
  16.             if(new File(odtFile).exists()){  
  17.                 System.out.println("odt文件已存在!");  
  18.                 inputFile = odtFile;  
  19.             }else{  
  20.                 try {  
  21.                     FileUtils.copyFile(inputFile,odtFile);  
  22.                     inputFile = odtFile;  
  23.                 } catch (FileNotFoundException e) {  
  24.                     System.out.println("文档不存在!");  
  25.                     e.printStackTrace();  
  26.                 }  
  27.             }  
  28.         }          
  29.         startService();  
  30.         System.out.println("进行文档转换转换:" + inputFile + " --> " + pdfFile);  
  31.         OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);  
  32.         converter.convert(new File(inputFile),new File(pdfFile));  
  33.         stopService();  
  34.         System.out.println();  
  35.     }  
  36.     public void convert2PDF(String inputFile) {  
  37.         String pdfFile = FileUtils.getFilePrefix(inputFile)+".pdf";  
  38.         convert2PDF(inputFile,pdfFile);          
  39.     }      
  40.     public static void startService(){  
  41.         DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();  
  42.         try {  
  43.           System.out.println("准备启动服务....");  
  44.             configuration.setOfficeHome(OFFICE_HOME);//设置OpenOffice.org安装目录  
  45.             configuration.setPortNumbers(port); //设置转换端口,默认为8100  
  46.             configuration.setTaskExecutionTimeout(1000 * 60 * 5L);//设置任务执行超时为5分钟  
  47.             configuration.setTaskQueueTimeout(1000 * 60 * 60 * 24L);//设置任务队列超时为24小时           
  48.             officeManager = configuration.buildOfficeManager();  
  49.             officeManager.start();    //启动服务  
  50.             System.out.println("office转换服务启动成功!");  
  51.         } catch (Exception ce) {  
  52.             System.out.println("office转换服务启动失败!详细信息:" + ce);  
  53.         }  
  54.     }      
  55.     public static void stopService(){  
  56.           System.out.println("关闭office转换服务....");  
  57.             if (officeManager != null) {  
  58.                 officeManager.stop();  
  59.             }  
  60.             System.out.println("关闭office转换成功!");  
  61.     }  

源代码下载地址:DocConverter

原文链接:http://www.cnblogs.com/luckyxiaoxuan/archive/2012/06/14/2549012.html


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 支付宝账户异常无法领取红包怎么办 微信q币支付错了怎么办 王者荣耀不小心把点卷用了怎么办 微信绑定的qq号密码忘记了怎么办 微信红包实名认证没银行卡怎么办 手机烂了换新手机微信支付宝怎么办 支付宝转账给别人号码没用了怎么办 微信转账验证码收不到怎么办 陌生网友生日叫我发红包怎么办 微信群的群主不小心推出群该怎么办 支付宝验证码被别人知道了怎么办 微信解除银行卡绑定零钱清零怎么办 qq号被盗了理财通的钱怎么办 工行转错账号的钱被冻结怎么办 微信20w限额满了怎么办 通过qq号申请微信被盗了怎么办 微信号被盗手机绑定被改怎么办 腾讯视频激活码兑换达到限制怎么办 虚拟服务购买自动每月扣q币怎么办 微信被骗充值Q币怎么办 微信给别人充q币怎么办 k歌别人送的k币怎么办 忘记了qq号码但记得密码怎么办 q自己的活干完了该怎么办 在应用宝下载的游戏搜不到了怎么办 衣服有图片在淘宝找不到同款怎么办 淘宝卖家小儿说质量不合格怎么办 订单显示显示已签收没收到货怎么办 网上买过的东西查不到订单号怎么办 亚航的组合机票飞机延误怎么办 在微信上面对面红包被骗了钱怎么办 人欠我钱不给我怎么办 微信号被骗走然后骗了朋友钱怎么办 微信手机充值不到帐怎么办 中银香港密码器坏了怎么办 香港恒生银行的编码器丢了怎么办 淘宝拍下订单发货物流不显示怎么办 wish查到仿品审核变慢怎么办 淘宝卖家订单号错误无法修改怎么办 顺丰快递运单号微信扫描取消怎么办 买的王者荣耀号有守护平台怎么办