Java如何把文档转换成PDF

分享知识 传递快乐

1、先在网上下载OpenOffice,并安装。
2、引入以下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

如果有新的jar,也可以引入新的jar。


代码如下:

package com.singleton;

import java.io.File;

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

import com.xh.Constant;

/**
 * 
 * @author H.Yang
 * @date 2017年9月8日
 */
public class SingleOpenOffice {

	private static SingleOpenOffice start = new SingleOpenOffice();
	private static OfficeManager officeManager;

	// 获取唯一可用的对象
	public static SingleOpenOffice getStart() {
		DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();
		System.out.println("准备启动服务....");
		configuration.setOfficeHome(FileSuffixType.FILEPATH.getName()); // 设置OpenOffice.org安装目录
		configuration.setPortNumber((int) FileSuffixType.PORT.getValue()); // 设置转换端口,默认为8100
		configuration.setTaskExecutionTimeout(Long.valueOf(String.valueOf(FileSuffixType.EXECUTE_OVERTIME.getValue())));
		configuration.setTaskQueueTimeout(Long.valueOf(String.valueOf(FileSuffixType.QUEUE_OVERTIME.getValue())));

		officeManager = configuration.buildOfficeManager();
		officeManager.start(); // 启动服务
		System.out.println("office服务启动成功!");
		return start;
	}

	/**
	 * 文档转换
	 * <hr>
	 * 将doc,docx,xls,xlsx,ppt,pptx,txt等文档转换成PDF文档,如果不指定输出地址默认当前文件地址
	 * 
	 * @author H.Yang
	 * @date 2016年12月13日
	 * @explain
	 * 
	 * @param inputFilePath
	 *            - 转换文件地址(必须)
	 * @param outputFilePath
	 *            - 输出地址(可空)
	 * @param newFileName
	 *            - 新文件名(可空)
	 * @return
	 */
	public String execute2Pdf(String inputFilePath, String outputFilePath, String newFileName) {
		File inputFile = new File(inputFilePath);
		String fileName = inputFile.getName();
		String prefix = fileName.substring(fileName.lastIndexOf(".") + 0);
		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 H.Yang
	 * @date 2016年12月13日
	 * @explain
	 * 
	 * @param inputFile
	 * @param outputFile
	 */
	private static void execute(File inputFile, File outputFile) {
		long startTime = System.currentTimeMillis();// 获取开始时间

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

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

	public static void getStop() {
		if (officeManager != null) {
			officeManager.stop();
		}
		System.out.println("office关闭成功!");
	}

}


源码下载:点击打开链接



如有不足或新的想法请留言--分享知识 传递快乐。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旷野历程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值