word转pdf

This commit is contained in:
18792927508
2023-12-07 17:41:00 +08:00
parent c7988344d3
commit 0ec450d85c
6 changed files with 215 additions and 23 deletions
@@ -0,0 +1,119 @@
package com.ruoyi.common.utils;
import cn.hutool.extra.spring.SpringUtil;
import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
import com.ruoyi.common.exception.ServiceException;
import lombok.extern.slf4j.Slf4j;
import org.jodconverter.document.DocumentFormat;
import org.jodconverter.office.OfficeException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* LibreOffice工具类,用于将word,excel,ppt等格式文件转为pdf预览
*
* @author xuyuxiang
* @date 2020/7/6 14:55
*/
@Slf4j
public class LibreOfficeUtil {
@Value("${jodconverter.local.office-home}")
private long OpenOffice_HOME;
private static DocumentConverter documentConverter;
private static void init() {
try {
documentConverter = SpringUtil.getBean(DocumentConverter.class);
} catch (Exception e) {
throw new ServiceException();
}
}
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;
}
/**
* doc转pdf(程序启动openoffice)
*
* @param inputFile 输入文件
* @param outputFile 输出文件
* @return
*/
public static boolean doc2pdf2(File inputFile, File outputFile) {
boolean result = false;
// OpenOffice的安装目录
String OpenOffice_HOME = "D:\\app\\libreOffice";
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;
}
}