智能仲裁后端服务

LibreOfficeUtil.java 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package com.ruoyi.common.utils;
  2. import cn.hutool.extra.spring.SpringUtil;
  3. import com.artofsolving.jodconverter.DocumentConverter;
  4. import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
  5. import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
  6. import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
  7. import com.ruoyi.common.exception.ServiceException;
  8. import lombok.extern.slf4j.Slf4j;
  9. import org.jodconverter.document.DocumentFormat;
  10. import org.jodconverter.office.OfficeException;
  11. import org.springframework.beans.factory.annotation.Value;
  12. import org.springframework.http.MediaType;
  13. import java.io.File;
  14. import java.io.IOException;
  15. import java.io.InputStream;
  16. import java.io.OutputStream;
  17. /**
  18. * LibreOffice工具类,用于将word,excel,ppt等格式文件转为pdf预览
  19. *
  20. * @author xuyuxiang
  21. * @date 2020/7/6 14:55
  22. */
  23. @Slf4j
  24. public class LibreOfficeUtil {
  25. @Value("${jodconverter.local.office-home}")
  26. private long OpenOffice_HOME;
  27. private static DocumentConverter documentConverter;
  28. private static void init() {
  29. try {
  30. documentConverter = SpringUtil.getBean(DocumentConverter.class);
  31. } catch (Exception e) {
  32. throw new ServiceException();
  33. }
  34. }
  35. public static boolean doc2pdf(File docFile, File pdfFile) {
  36. boolean result = false;// 转换结果
  37. if (docFile.exists()) {
  38. if (!pdfFile.exists()) {
  39. OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
  40. try {
  41. connection.connect();
  42. DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
  43. converter.convert(docFile, pdfFile);
  44. // 关闭连接
  45. connection.disconnect();
  46. result = true;
  47. log.info("****pdf转换成功,PDF输出:" + pdfFile.getPath() + "****");
  48. } catch (java.net.ConnectException e) {
  49. log.error("openoffice服务未启动", e);
  50. } catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {
  51. log.error("读取转换文件失败", e);
  52. } catch (Exception e) {
  53. log.error("转换失败", e);
  54. }
  55. } else {
  56. result = true;
  57. log.info("****已经转换为pdf,不需要再进行转化****");
  58. }
  59. } else {
  60. log.info("****需要转换的文档不存在,无法转换****");
  61. }
  62. return result;
  63. }
  64. /**
  65. * doc转pdf(程序启动openoffice)
  66. *
  67. * @param inputFile 输入文件
  68. * @param outputFile 输出文件
  69. * @return
  70. */
  71. public static boolean doc2pdf2(File inputFile, File outputFile) {
  72. boolean result = false;
  73. // OpenOffice的安装目录
  74. String OpenOffice_HOME = "D:\\app\\libreOffice";
  75. if (OpenOffice_HOME.charAt(OpenOffice_HOME.length() - 1) != '/') {
  76. OpenOffice_HOME += "/";
  77. }
  78. Process process = null;
  79. try {
  80. // 启动OpenOffice的服务
  81. String command = OpenOffice_HOME
  82. + "program/soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"";
  83. process = Runtime.getRuntime().exec(command);
  84. // 连接 OpenOffice实例,运行在8100端口
  85. OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1", 8100);
  86. connection.connect();
  87. // 转换
  88. DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
  89. converter.convert(inputFile, outputFile);
  90. // 关闭连接
  91. connection.disconnect();
  92. // 销毁OpenOffice服务的进程
  93. process.destroy();
  94. log.info("****pdf转换成功,PDF输出:" + outputFile.getPath() + "****");
  95. return true;
  96. } catch (Exception e) {
  97. log.error("pdf转换失败", e);
  98. } finally {
  99. if (process != null) {
  100. process.destroy();
  101. }
  102. }
  103. return result;
  104. }
  105. }