使用docconverter和openoffice服务完成将文档转换为pdf文件,跨平台,支持97-03、07及以后的文档
1.下载openoffice
有Windows、Linux等版本,下载后安装
下载地址:http://www.openoffice.org/download/index.html
2.jodconverter Maven依赖
(1).2.2.1版本
中央仓库里面有2.2.1和3.0-alfresco-patched-20141024版本,后者无法下载;
使用2.2.1版本可以正常转换txt、97-03的doc、xls、ppt为PPT,07及以后则会提示:unknown document format for file(未知文档格式)
com.artofsolving
jodconverter
2.2.1
(2).2.2.2版本
中央仓库没发现,去官网down了一个;之后需要将所依赖的jar包手动添加至到本地maven中(这个大家都会的就不多说了);
解压后进入lib目录,有个DEPENDENCIES.txt文件,这里面说明了所依赖的jar包,内容如下(大家都看得懂就不翻译了):
To use the library in your own Java app you need
相关maven依赖如下,日志、io自行添加:
com.artofsolving
jodconverter
2.2.2
org.openoffice
juh
3.0.1
org.openoffice
jurt
3.0.1
org.openoffice
ridl
3.0.1
org.openoffice
unoil
3.0.1
下载地址:https://sourceforge.net/projects/jodconverter/files/
方式一:
1.手动启动openoffice服务,在程序中调用该服务转换,本地openoffice安装在G:/Program Files (x86)/OpenOffice 4目录下
cd G:\Program Files (x86)\OpenOffice 4\program
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
2.代码
运行该程序时需先启动openoffice服务;测试了txt、doc、docx、xls、xlsx、ppt格式文件,均能转换成功
/**
* 文档2pdf
* @param docFile 文件路径
* @param pdfFile pdf输出路径
* @return
*/
public static boolean doc2pdf(File docFile, File pdfFile) {
boolean result = false;// 转换结果
if (docFile.exists()) {
if (!pdfFile.exists()) {
OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
try {
connection.connect();
DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
converter.convert(docFile, pdfFile);
// 关闭连接
connection.disconnect();
result = true;
LOG.info("****pdf转换成功,PDF输出:" + pdfFile.getPath() + "****");
} catch (java.net.ConnectException e) {
LOG.error("openoffice服务未启动", e);
} catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {
LOG.error("读取转换文件失败", e);
} catch (Exception e) {
LOG.error("转换失败", e);
}
} else {
result = true;
LOG.info("****已经转换为pdf,不需要再进行转化****");
}
} else {
LOG.info("****需要转换的文档不存在,无法转换****");
}
return result;
}
方式二:
程序中启动openoffice服务,并转换文档为pdf;测试文件同方式一
/**
* doc转pdf(程序启动openoffice)
*
* @param inputFile 输入文件
* @param outputFile 输出文件
* @return
*/
public static boolean doc2pdf2(File inputFile, File outputFile) {
boolean result = false;
// OpenOffice的安装目录
String OpenOffice_HOME = "G:/Program Files (x86)/OpenOffice 4";
if (OpenOffice_HOME.charAt(OpenOffice_HOME.length() - 1) != '/') {
OpenOffice_HOME += "/";
}
Process process = null;
try {
// 启动OpenOffice的服务
String command = OpenOffice_HOME
+ "program/soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"";
process = Runtime.getRuntime().exec(command);
// 连接 OpenOffice实例,运行在8100端口
OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1", 8100);
connection.connect();
// 转换
DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
converter.convert(inputFile, outputFile);
// 关闭连接
connection.disconnect();
// 销毁OpenOffice服务的进程
process.destroy();
LOG.info("****pdf转换成功,PDF输出:" + outputFile.getPath() + "****");
return true;
} catch (Exception e) {
LOG.error("pdf转换失败", e);
} finally {
if (process != null) {
process.destroy();
}
}
return result;
}
参考博客:http://huangronaldo.iteye.com/blog/1628339