天天看点

Office文档转换成PDF分享知识 传递快乐

分享知识 传递快乐

Office文档转换成PDF

文档转换的方式有很多种,比如有Apache下的POI、jodconverter等技术。本例用的jodconverter-core-3.0技术对文档进行转换,首先下载所需的JAR包有:

commons-cli-1.1.jar
commons-io-1.4.jar
jodconverter-core-3.0-beta-4.jar
juh-3.2.1.jar
jurt-3.2.1.jar
ridl-3.2.1.jar
unoil-3.2.1.jar
           

如果用jodconverter-core转换文档时需要安装OpenOffice,要借助OpenOffice来在线浏览office文档,前提是要转成pdf。因为浏览器不能直接找开office文档,所以只能转换一下。 想要运行些项目机器上必须要装上OpenOffice才可以运行,否则不能运行,windows和Linux都可以运行的。有些网上说要先手动启用服务,再运行项目, 但这个项目不用,只要安装了OpenOffice就可以了,项目里有开启和关闭OpenOffice服务。

本项目有3.0和2.0两个版本

OpenOffice2Pdf所的技术是jodconverter-core-3.0.jar,(3.0和2.0很大,详情上网查),

源码:

package com.xh;

// 定义属性
public class Constant {
	// 可以操作的文件类型
	public static final String FILE_SUFFIX[] = { ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".txt" };
	// 转换得出的文件类型
	public static final String PDF_SUFFIX = ".pdf";
	// OpenOffice安装路径
	public static final String OFFICE_HOME = "D:/OpenOffice/OpenOffice 4";
	// 设置转换端口,默认为8100
	public static final int PORT = ;
	// 设置任务执行超时为2分钟
	public static final long EXECUTE_OVERTIME =  *  * ;
	// 设置任务队列超时为5分钟
	public static final long QUEUE_OVERTIME =  *  * ;
}
           
package com.xh;

import java.io.File;

import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeManager;

public class OpenOffice2Pdf {

	private static OfficeManager officeManager;

	/**
	 * 文档转换
	 * <hr>
	 * 将doc,docx,xls,xlsx,ppt,pptx,txt等文档转换成PDF文档,如果不指定输出地址默认当前文件地址
	 * 
	 * @author Hyang
	 * @date 2016年12月13日
	 * @explain
	 * 
	 * @param inputFilePath
	 *            - 转换文件地址(必须)
	 * @param outputFilePath
	 *            - 输出地址(可空)
	 * @param newFileName
	 *            - 新文件名(可空)
	 * @return
	 */
	public String execute2Pdf(String inputFilePath, String outputFilePath, String newFileName) {

		return processing(inputFilePath, outputFilePath, newFileName);
	}

	/**
	 * 数据加工
	 * 
	 * @author Hyang
	 * @date 2016年12月13日
	 * @explain
	 * 
	 * @return
	 */
	private static String processing(String inputFilePath, String outputFilePath, String newFileName) {
		File inputFile = new File(inputFilePath);
		String fileName = inputFile.getName();
		String prefix = fileName.substring(fileName.lastIndexOf(".") + );
		String outputPath = null;
		
		boolean isTrue = false;
		if (!inputFile.exists()) {
			System.out.println("文件不存在!");
			return null;
		}

		for (String name : Constant.FILE_SUFFIX) {
			if (fileName.endsWith(name)) {
				isTrue = true;
				break;
			}
		}
		
		if (!isTrue) {
			System.out.println("文件格式错误");
			return null;
		}
		
		if (outputFilePath != null) {
			outputPath = newFileName == null ? outputFilePath + fileName.replace(prefix, Constant.PDF_SUFFIX)
					: outputFilePath + fileName.replace(fileName, newFileName) + Constant.PDF_SUFFIX;
		} else {
			outputPath = newFileName == null ? inputFile.getPath().replace(prefix, Constant.PDF_SUFFIX)
					: inputFile.getPath().replace(fileName, newFileName) + Constant.PDF_SUFFIX;
		}
		
		File outputFile = new File(outputPath);
		if (!outputFile.exists()) {
			//执行方法服务功能
			execute(inputFile, outputFile);
		} else {
			System.out.println("文件已存在");
		}

		return outputPath;
	}

	/**
	 * 执行方法服务功能
	 * 
	 * @author Hyang
	 * @date 2016年12月13日
	 * @explain
	 * 
	 * @param inputFile
	 * @param outputFile
	 */
	private static void execute(File inputFile, File outputFile) {
		long startTime = System.currentTimeMillis();// 获取开始时间

		try {
			if (startService()) {
				System.out.println("进行文档转换转换:" + inputFile + " --> " + outputFile);
				OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
				converter.convert(inputFile, outputFile);
				System.out.println("Office转换成功");
				stopService();
			}
		} catch (Exception e) {
			stopService();
			e.printStackTrace();
		}

		long endTime = System.currentTimeMillis(); // 获取结束时间
		System.out.println("程序运行时间: " + (endTime - startTime) /  + "s");
	}

	/**
	 * 开启服务
	 * 
	 * @author Hyang
	 * @date 2016年12月13日
	 * @explain
	 * 
	 * @return
	 */
	private static boolean startService() {
		DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();
		try {
			// 设置任务执行超时,
			long executeOvertime = Constant.EXECUTE_OVERTIME;
			// 设置任务队列超时
			long queueOvertime = Constant.QUEUE_OVERTIME;

			System.out.println("准备启动服务....");
			configuration.setOfficeHome(Constant.OFFICE_HOME); // 设置OpenOffice.org安装目录
			configuration.setPortNumber(Constant.PORT); // 设置转换端口,默认为8100
			configuration.setTaskExecutionTimeout(executeOvertime);
			configuration.setTaskQueueTimeout(queueOvertime);

			officeManager = configuration.buildOfficeManager();
			officeManager.start(); // 启动服务
			System.out.println("office服务启动成功!");
			return true;
		} catch (Exception ce) {
			System.out.println("office转换服务启动失败!详细信息:" + ce);
			return false;
		}
	}

	/**
	 * 关闭服务
	 * 
	 * @author Hyang
	 * @date 2016年12月13日
	 * @explain
	 *
	 */
	private static void stopService() {
		System.out.println("准备关闭服务....");
		if (officeManager != null) {
			officeManager.stop();
		}
		System.out.println("office关闭成功!");
	}

}
           
/**
 * 
 * @author Dingdong
 * @date 2016年12月14日
 * @explain
 */
public class Test {

	public static void main(String[] args) {
		
		OpenOffice2Pdf openOffice2Pdf = new OpenOffice2Pdf();
		String path = "E:/TestThreadOpenOffice/1理性追求者的福音.docx";

		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
		String dateTime = sdf.format(new Date());
		String resultPath = openOffice2Pdf.execute2Pdf(path, null, dateTime);
		System.out.println(resultPath);
	}
}
           

源码如下:点击打开链接