分享知识 传递快乐
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 = 8100;
// 设置任务执行超时为2分钟
public static final long EXECUTE_OVERTIME = 2 * 60 * 1000;
// 设置任务队列超时为5分钟
public static final long QUEUE_OVERTIME = 5 * 60 * 1000;
}
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(".") + 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 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) / 1000 + "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);
}
}
源码如下:点击打开链接