借助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文件

打开可见转化效果良好~个人简历就不打开了

posted @ 2016-10-13 17:19  曲项向天歌  阅读(1644)  评论(0编辑  收藏  举报