借助OpenOffice实现office转pdf(Java)的.exe小程序
原料:OpenOffice4.1.2(之所以选OpenOffice是因为可以跨平台,下载后直接安装),jodconverter-core-3.0-beta-4-dist.zip(可以搜博客园),Exe4j
目标:生成一个office2pdf.exe程序,在命令行中用该程序实现转换。
1.先建立一个文件夹(我在桌面建了一个ExecuteFile文件夹,将jodconverter-core-3.0-beta-4-dist.zip解压后的lib文件夹拷贝到该文件夹)
2.下面是在eclipse中建的项目
3.代码:
Office2Pdf.java代码
package com.gohigh; import java.util.*; import java.io.*; import org.apache.log4j.Logger; import org.artofsolving.jodconverter.OfficeDocumentConverter; import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration; import org.artofsolving.jodconverter.office.OfficeManager; /** * * @author lxh */ public class Office2Pdf{ public static Logger logger = Logger.getLogger(Office2Pdf.class); public static ResourceBundle bundle =null; public Office2Pdf(){} public OfficeManager getOfficeManager() { DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration(); // 获取OpenOffice的安装目录 Properties prop=new Properties(); String rootPath = System.getProperty("user.dir").replace("\\", "/"); FileInputStream in; try { in = new FileInputStream(rootPath+"/OpenOffice_Home.properties");try { prop.load(in); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); logger.error("openoffice安装配置文件找不到"); } String officeHome=prop.getProperty("OpenOffice_Home"); config.setOfficeHome(officeHome); OfficeManager officeManager = config.buildOfficeManager(); return officeManager; } public void office2pdf(String inputFilePath, String outputFilePath) { OfficeManager officeManager = getOfficeManager(); // 启动OpenOffice的服务 officeManager.start(); // 连接OpenOffice OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager); if (null != inputFilePath) { File inputFile = new File(inputFilePath); // 判断目标文件路径是否为空 if (null == outputFilePath) { // 转换后的文件路径 outputFilePath= getOutputFilePath(inputFilePath); File outputFile = new File(outputFilePath); if (inputFile.exists()) {// 找不到源文件, 则返回 converter.convert(inputFile, outputFile); }else{ logger.error("源文件无效"); } } else { File outputFile=new File(outputFilePath); if (!outputFile.getParentFile().exists()) { outputFile.getParentFile().mkdirs(); } File[] files=outputFile.getParentFile().listFiles(); for(File ff:files){ if(ff.equals(outputFile)) logger.warn("文件名重复"); } if (inputFile.exists()) {// 找不到源文件, 则返回 converter.convert(inputFile, outputFile); logger.info("转换完成"); }else{ logger.error("源文件无效"); } } officeManager.stop(); } else { logger.error("没有源文件"); } } public String getOutputFilePath(String inputFilePath) { String[] s=inputFilePath.split("\\."); String outputFilePath =s[0]+".pdf"; return outputFilePath; } }
Process.java代码
package com.gohigh; import org.apache.log4j.Logger; public class Process { /** * @param args */ public static Logger logger = Logger.getLogger(Process.class); public static void main(String[] args) { Office2Pdf office=new Office2Pdf(); try{ office.office2pdf(args[0], args[1]); }catch(Exception e){ logger.error("请输入有效路径"); } } }
OpenOffice_Home.properties(配置OpenOffice的安装目录,然后将其拷贝到要输出的文件夹中,以便在项目打包成jar包后配置其安装路径,此处是默认安装路径)
OpenOffice_Home=C:\\Program Files (x86)\\OpenOffice 4
log4j.properties(此处是想运用刚学习的日志知识,输出日志路径为F://logs)
### \u8BBE\u7F6E### log4j.rootLogger = debug,stdout,D,E ### \u8F93\u51FA\u4FE1\u606F\u5230\u63A7\u5236\u62AC ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n ### \u8F93\u51FADEBUG \u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7\u5230=E://logs/error.log ### log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = F://logs/log.log log4j.appender.D.Append = true log4j.appender.D.Threshold = DEBUG log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n ### \u8F93\u51FAERROR \u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7\u5230=E://logs/error.log ### log4j.appender.E = org.apache.log4j.DailyRollingFileAppender log4j.appender.E.File =F://logs/error.log log4j.appender.E.Append = true log4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayout log4j.appender.E.layout.Conversi
4.将项目Office2Pdf打成jar包,输出到ExecuteFile文件中
最终用jar包外面的openoffice安装路径配置文件,所以不将它打包,此时ExecuteFile文件夹中便生成了Office2Pdf.jar
5.利用Exe4j将jar文件转成可执行程序office2pdf.exe(此处转化可百度,为防目标机器没有安装jdk,可先将jre拷贝到ExecuteFile文件夹,以便生成.exe时用)
最终ExecuteFile文件夹中便有了office2pdf.exe
此时便大功告成了,下面可以直接使用了:
ExecuteFile文件夹中生成的1.pdf文件
打开可见转化效果良好~个人简历就不打开了