Files
Arbitrate-Backend/ruoyi-common/src/main/java/com/ruoyi/common/utils/LibreOfficeUtil.java
T
2023-12-07 17:41:00 +08:00

120 lines
4.2 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;
}
}