仿百度文库解决方案(三)- 利用JODConverter把文档转换成pdf格
????????? 文档的转换成pdf格式的方法有很多,目前主要有三种解决方案:利用Jacob或者JCom调用MS Office或者WPS Office API,利用JODConverter调用OpenOffice.org服务,调用虚拟打印机转换文档为PDF。由于本人对于Jacob和JCom调用MS Office 或者wps Office API不是很了解,在这里就不说了,本文用到的方法主要是JODConverter调用OpenOffice.org 服务,调用虚拟打印机转换文档为PDF。 在这里首先了解一下JODConverter软件。?? ?????? ???????? JODConverter,是一个Java的OpenDocument文件转换器,可以进行许多文件格式的转换。它依赖于OpenOffice.org或者LibreOffice提供的服务来进行转换,它能将Microsoft?Office文档(Word,Excel,PowerPoint)转换为PDF格式。? ??????? 当前的JODConverter的版本是是JODConverter3.0。本文用到的是?JODConverter2.2.2版本的下载地址是?:http://download.csdn.net/detail/yali1990515/4443791? ?JODConverter的使用你可以把嵌入在java程序中,也可以单独作为命令由脚本条用。?更可以应用为网页程序或者Web?Service以供网络应用。 ?1?主要接口的声明?: ???????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?FilesOpenOffice.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?算法的设计?? ????? ????第一步,启动OpenOffice服务。例如,首先设定DefaultOfficeManagerConfiguration相关参数来配置OpenOffice,并得到OfficeManager。调用OfficeManager实现类的start方法启动服务。 第二步,转换文档。例如,初始化OfficeDocumentConverter,调用其convert方法执行转换。 第三步,停止OpenOffice服务。例如,调用OfficeManager实现类的stop方法停止方法。 ??3 JODConverter的安装配置???????JODConverter的安装配置在这里就不说了,如果不知道的可以去百度或者google搜索一下,网上都有很全面的说明。下载完JJODConverter之后解压压缩包,把JODConverter的lib目录下的jar包考到做到的项目中,本文还需要把jodconverter-core-3.0-beta-4.jar拷到lib目录下,由于文章中用到了org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;不然会报出错误。至于jodconverter-core-3.0-beta-4.jar??????可以从文中的案例中拷到。案例的下载地址为 :http://download.csdn.net/download/yali1990515/4443960 ?????? lib目录下的jar加载完成后如下: ???? 4?文档的转换 ? ?????????????? ?文档的转换分为两类:文本文档的转换和office文档转换。 ??????????????? 文本文档的转换的主要方法是: 先把文件转换为后缀名为odt的文件,之后在调用OfficeDocumentConverter中的converter的方法把文件转换为pdf格式就好了,在这样的原因主要为了防止转换时出现乱码的问题。 第二类 :office文档的转换只要我们开启服务直接转换就可以了。关于文档的转换的代码如下 : ???????? package cn.bzu.edu.SoCool.convert; 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; //转换文档为pdf public class OpenOfficePdfConvert { /** * @param args */ private static OfficeManager officeManager;//需要导入一个 private static String OFFICE_HOME = "C:Program FilesOpenOffice.org 3";//安装OPenOffice 的路径 private static int port[] = { 8100 }; public void convert2PDF(String inputFile,String outputFile) throws FileNotFoundException { /* 1 进行转换 操作 * 2 start service * 3 deal tranlate * 3 stop service */ String fileName1 = inputFile.substring(0,inputFile.lastIndexOf(".")); if(inputFile.endsWith("txt")){ String odtFile = fileName1+".odt"; if(new File(odtFile).exists()){ System.out.println("odt文件已存在!"); inputFile = odtFile; }else{ FileUtil.copyFile(inputFile,odtFile); inputFile = odtFile; } } //开启服务器 startService(); //进行转换 System.out.println("进行文档转换转换:" + inputFile + " --> " + outputFile); OfficeDocumentConverter converter = new OfficeDocumentConverter( officeManager); converter.convert(new File(inputFile),new File(outputFile)); //关闭服务器 stopService(); System.out.println(); } // 打开服务器 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转换成功!"); } /* * 进行测试转换是否成功 public static void main(String[] args) { // TODO Auto-generated method stub String inputFile = "d:resource1.doc"; String outputFile = "d:resource1.pdf"; OpenOfficePdfConvert opc = new OpenOfficePdfConvert(); try { opc.convert2PDF(inputFile,outputFile); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } */ }
???????? http://www.cnblogs.com/luckyxiaoxuan/archive/2012/06/13/2548331.html ? ?????? http://www.cnblogs.com/star-studio/archive/2011/12/09/2282411.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |