* 以前的代码以及下载文件有误,以下是我重新修改以及测试过的。完全没问题!!!!!!!!!!!!!!
如果在使用我的代码的时候出现任何问题,请及时联系我 qq:2587912906 请备注:"博客园" !!!!!!!!!!
1. 下载 openoffice 地址
https://pan.baidu.com/s/16dD30NohM6PbCvBrEdnLsw
http://www.openoffice.org/ 下载最新版本
下载文件中包括下面需要的 所有的jar 包,请放心下载!!!!!!!!!
2. jodconverter-2.2.2.zip :
3. jodconverter-core-3.0-beta-4.jar :
jodconverter-core-3.0-beta-4.jar 这个jar包也在上面的文件中。
4. 接下来我将讲解如果是在maven 项目中使用openoffice 的时候jar 包引入的正确方式。因为我在上面提到的jar包 从maven库中下载不了。
(1)准备我在上面提到的 jar 包。
(2)在你maven项目中的pom.xml文件中引入如下几个依赖。
<dependency>
<groupId>com.artofsolving</groupId>
<artifactId>jodconverter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>jurt</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>ridl</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>juh</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>unoil</artifactId>
<version>3.0.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.artofsolving.jodconverter/jodconverter-core -->
<dependency>
<groupId>org.artofsolving.jodconverter</groupId>
<artifactId>jodconverter-core</artifactId>
<version>3.0-beta-4</version>
</dependency>
* 记住:这些依赖不在maven库中,所以你引入的时候是无法下载的。请仔细看我是如何做到的!!!!!!!!!!
引入如上几个依赖后虽然无法下载jar包,但是可以创建对应版本的文件夹。比如:
(3)接下来找到我在上面给的依赖的对应的jar包(jar包都在我给的下载地址中的文件夹中),并把jar包放进对应的地址中。
放进去后最后一个步骤:在你jar 包所在目录中 创建跟你jar包同名的 .pom 文件。 比如:jar包是 jodconverter-core-3.0-beta-4.jar ,那么你需要创建同名的 jodconverter-core-3.0-beta-4.pom 文件。
这个必须要加进去,不然等下你刷新pom 文件的时候还是无法下载依赖。
5. 完成上面所有的步骤后按照下面的操作图操作就可以完美的解决依赖问题了。
点击图中的刷新按钮,idea 就会重新下载依赖了。多刷新几次,如果还有出现跟我一样的报错,请重启idea 问题就会解决了。
如果还是无法解决,请联系我!!!!!!!!!!!
6. 使用openoffice的工具类
package com.rdkl.utils;
import java.io.File;
import org.apache.commons.io.FilenameUtils;
import org.apache.log4j.Logger;
import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.ExternalOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeException;
import org.artofsolving.jodconverter.office.OfficeManager;
import com.ddyun.imooc.common.SysConfigManager;
public class PdfUtils {
private static final Logger logger = Logger.getLogger(PdfUtils.class
.getName());
@SuppressWarnings("static-access")
private static String officeHome = ""; //这里写的是你的openoffice的安装地址,如果你在安装openOffice 的时候选择的是默认安装,那么地址是:C:/Program Files (x86)/OpenOffice 4/。
//如果是自定义的安装方式,请填写自定义安装路径。
@SuppressWarnings("static-access")
private static int port = 8100;//这里的内容是根据你的系统选择不同的端口号,windows系统的端口号是8100
private static OfficeManager officeManager; // 尝试连接已存在的服务器 private static boolean reconnect(){ try {
// 尝试连接openoffice的已存在的服务器
ExternalOfficeManagerConfiguration externalProcessOfficeManager = new ExternalOfficeManagerConfiguration();
externalProcessOfficeManager.setConnectOnStart(true);
externalProcessOfficeManager.setPortNumber(8100);
officeManager = externalProcessOfficeManager.buildOfficeManager();
officeManager.start();
return true;
} catch (OfficeException e) {
e.printStackTrace();
return false;
}
}
// 开启新的openoffice的进程
private static void start() {
logger.debug("启动OpenOffice服务");
try {
DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();
configuration.setOfficeHome(officeHome);// 安装地址
configuration.setPortNumbers(port);// 端口号
configuration.setTaskExecutionTimeout(1000 * 60 * 5);// 设置任务执行超时为5分钟
configuration.setTaskQueueTimeout(1000 * 60 * 60 * 24);// 设置任务队列超时为24小时
officeManager = configuration.buildOfficeManager();
officeManager.start(); // 启动服务
} catch (Exception e) {
logger.error("启动OpenOffice服务出错" + e);
}
}
// 使用完需要关闭该进程
private static void stop() {
logger.debug("关闭OpenOffice服务");
try {
if (officeManager != null)
officeManager.stop();
} catch (Exception e) {
logger.error("关闭OpenOffice服务出错" + e);
}
}
public static File convertToPdf(String input) {
File inputFile = null;
File outFile = null;
try {
// 如果已存在的服务不能连接或者不存在服务,那么开启新的服务
if(!reconnect()){
start();// 开启服务
}
// filenameUtils是Apache对java io的封装。 FilenameUtils.separatorsToSystem:转换分隔符为当前系统分隔符 / FilenameUtils.getFullPath:获取文件的完整目录
// FilenameUtils.getBaseName:取出文件目录和后缀名的文件名
String output = FilenameUtils.separatorsToSystem(FilenameUtils.getFullPath(input) + FilenameUtils.getBaseName(input) + ".pdf");
inputFile = new File(input);
outFile = new File(output);
logger.info("开始转换文档:" + input + "=>" + output);
OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
converter.convert(inputFile,outFile); // 转换文档
} catch (Exception e) {
logger.error("转换文档出错" + e);
outFile = null;
}finally{
logger.info("结束转换文档");
stop();
}
return outFile;
}
// 测试工具类是否成功
public static void main(String[] args) {
//PdfUtils.convertToPdf("E:/test.ppt");
File sf = new File("E:/test.ppt");
System.out.println(sf.getPath());
}
}