windows环境下word转PDF
一、安装openoffice
我自己在官网上下载openoffice的windows版本和linux版本都非常慢,这里我提供一下我的云盘链接(windows版本),方便下载 https://pan.baidu.com/s/1HKrN9x_ogvzpDt0PUHr3mw 提取码 g3ee。我自己是安装在E:\LibreOffice目录下。
二、springboot依赖导入
注意 :jodconverter 2.2.1 不支持docx和xlsx等格式 而jodconverter 2.2.2版本是支持。但是jodconverter 2.2.2 在maven仓库是找到不到的,我也是找了半天才找到个免费的,也通过云盘提供出来,https://pan.baidu.com/s/1a-VGljgQQaeN3-gUh60ZCg 提取码 rhf8。
第一步:添加如下依赖
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>unoil</artifactId>
<version>4.1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.openoffice/ridl -->
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>ridl</artifactId>
<version>4.1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.openoffice/jurt -->
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>jurt</artifactId>
<version>4.1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.openoffice/juh -->
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>juh</artifactId>
<version>4.1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.libreoffice/officebean -->
<dependency>
<groupId>org.libreoffice</groupId>
<artifactId>officebean</artifactId>
<version>6.3.2</version>
</dependency>
第二步:手动添加 jodconverter-2.2.2依赖
将jodconverter-2.2.2.jar包放在E盘下。在idea Terminal下输入mvn install:install-file -Dfile=E:\jodconverter-2.2.2.jar -DgroupId=com.artofsolving -DartifactId=jodconverter -Dversion=2.2.2 -Dpackaging=jar
然后在pom文件中添加
<dependency>
<groupId>com.artofsolving</groupId>
<artifactId>jodconverter</artifactId>
<version>2.2.2</version>
</dependency>
三、编码
编写一个工具类FileUtils,其中openOpen方法是在windows环境下执行开启openoffice一个进程
public static void openOffice(String ip, int port) {
try {
Properties prop = System.getProperties();
String os = prop.getProperty("os.name");
//openOffice的安装路径
String command = "E:\\LibreOffice\\program\\soffice.exe -headless -accept=\"socket,host=" + ip +",port="+port+";urp;\"";
if (os != null && os.toLowerCase().indexOf("windows") > -1) {
Process pro = Runtime.getRuntime().exec(command);
}
} catch (Exception e) {
e.printStackTrace();
}
}
其中Office2Pdf方法是转换word文档为PDF的业务逻辑代码,根据自己的需求编写。本地环境下就使用127.0.0.1 8100
public static String Office2Pdf(File file, String ip, int port){
//启动服务
openOpenOffice(ip, port);
/*支持txt docx pptx ppt doc xlsx xls 转pdf*/
//判断源文件是否存在
if (!file.exists()){
throw new RuntimeException("源文件不存在!");
}
String newPath = "E:/offices/" + file.getName().substring(0,file.getName().lastIndexOf("."));
// 输出文件目录
File outputFile = new File(newPath+".pdf");
// 创建openoffice服务连接 127.0.0.1 8100
OpenOfficeConnection connection = new SocketOpenOfficeConnection(ip, port);
try {
//连接OpenOffice服务
connection.connect();
//创建文件转换器
DocumentConverter converter = new StreamOpenOfficeDocumentConverter(connection);
//开始转换
converter.convert(file, outputFile);
if (outputFile.exists()){
System.out.println("文件转换成功!");
return s;
}
} catch (ConnectException e) {
e.printStackTrace();
throw new RuntimeException("OpenOffice服务启动失败!");
}finally {
//关闭连接
connection.disconnect();
}
return outputFile.getAbsolutePath();
}
四、application.properties配置
正式环境的port为8087,在下一篇博文中设置https://blog.csdn.net/qq_27576109/article/details/106635213。IP 都设置为127.0.0.1。在调用 openOffice方法时,传入IP和port即可。
pdf-ip=127.0.0.1
pdf-port=8100