From d8b5536c53c7eddd0c6705d63babeaea005944b0 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期四, 06 三月 2025 18:07:31 +0800
Subject: [PATCH] Merge branch 'master' of https://gitee.com/xiaochen991015/xizang

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/PdfUtils.java |   98 +++++++++++++++++++++++++++++++++++--------------
 1 files changed, 70 insertions(+), 28 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/PdfUtils.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/PdfUtils.java
index c786d9b..9c274d7 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/PdfUtils.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/PdfUtils.java
@@ -12,6 +12,7 @@
 import java.io.*;
 import java.net.URL;
 import java.nio.file.Files;
+import java.util.concurrent.TimeUnit;
 
 @Slf4j
 @Component
@@ -23,44 +24,85 @@
      *
      * @param url
      */
-    public  String wordToPdf(String url,String filePath, String fileName) {
+//    public  String wordToPdf(String url,String filePath, String fileName) {
+//        try {
+//            DocumentType documentType = DocumentType.DOC;
+//            if(url.contains(".docx")){
+//                documentType = DocumentType.DOCX;
+//            }
+//            if(url.contains(".doc")){
+//                documentType = DocumentType.DOC;
+//            }
+//            if(url.contains(".xlsx")){
+//                documentType = DocumentType.XLSX;
+//            }else {
+//                if(url.contains(".xls")){
+//                    documentType = DocumentType.XLS;
+//                }
+//            }
+//            InputStream inputStream = new URL(url).openStream();
+//            ByteArrayOutputStream stream = new ByteArrayOutputStream();
+//            IConverter converter = LocalConverter.builder().build();
+//            converter.convert(inputStream)
+//                    .as(documentType)
+//                    .to(stream)
+//                    .as(DocumentType.PDF).execute();
+//
+//            //上传图片
+//            byte2File(stream.toByteArray(),filePath + "/pdf",fileName.substring(0,fileName.lastIndexOf(".")) + ".pdf");
+//            MultipartFile multipartFile = convertToMultipartFile(stream,fileName.substring(0,fileName.lastIndexOf(".")) );
+//            String s = tencentCosUtil.upLoadFile(multipartFile,"/wordToPdf");
+//
+//            stream.close();
+//            inputStream.close();
+//            return s;
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//        return null;
+//    }
+
+    public String wordToPdf(String url, String filePath, String fileName) {
         try {
             DocumentType documentType = DocumentType.DOC;
-            if(url.contains(".docx")){
+            if (url.contains(".docx")) {
                 documentType = DocumentType.DOCX;
-            }
-            if(url.contains(".doc")){
+            } else if (url.contains(".doc")) {
                 documentType = DocumentType.DOC;
-            }
-            if(url.contains(".xlsx")){
+            } else if (url.contains(".xlsx")) {
                 documentType = DocumentType.XLSX;
-            }else {
-                if(url.contains(".xls")){
-                    documentType = DocumentType.XLS;
-                }
+            } else if (url.contains(".xls")) {
+                documentType = DocumentType.XLS;
             }
-            InputStream inputStream = new URL(url).openStream();
-            ByteArrayOutputStream stream = new ByteArrayOutputStream();
-            IConverter converter = LocalConverter.builder().build();
-            converter.convert(inputStream)
-                    .as(documentType)
-                    .to(stream)
-                    .as(DocumentType.PDF).execute();
 
-            //上传图片
-            byte2File(stream.toByteArray(),filePath + "/pdf",fileName.substring(0,fileName.lastIndexOf(".")) + ".pdf");
-            MultipartFile multipartFile = convertToMultipartFile(stream,fileName.substring(0,fileName.lastIndexOf(".")) );
-            String s = tencentCosUtil.upLoadFile(multipartFile,"/wordToPdf");
+            // Ensure the URL has a protocol part
+            if (!url.startsWith("file://") && !url.startsWith("http://") && !url.startsWith("https://")) {
+                url = "file://" + url;
+            }
 
-            stream.close();
-            inputStream.close();
-            return s;
+            // 使用LibreOffice进行转换
+            ProcessBuilder pb = new ProcessBuilder(
+                    "soffice",
+                    "--headless",
+                    "--convert-to", "pdf",
+                    "--outdir", new File(filePath+ "/pdf"+fileName.substring(0, fileName.lastIndexOf(".")) + ".pdf").getParent(),
+                    filePath+fileName
+            );
+            Process process = pb.start();
+
+            // 等待转换完成
+            int exitCode = process.waitFor();
+            if (exitCode == 0) {
+                System.out.println("PDF转换成功!");
+            } else {
+                System.out.println("PDF转换失败!");
+            }
+            return "";
         } catch (Exception e) {
             e.printStackTrace();
+            throw new RuntimeException("Failed to generate PDF: " + e.getMessage(), e);
         }
-        return null;
     }
-
 
 
     public static MultipartFile convertToMultipartFile(ByteArrayOutputStream baos, String fileName) throws IOException {
@@ -209,10 +251,10 @@
     }
 
     public String test(String fileName){
-        String url = "file:///E:\\"+fileName;
+        String url = "file:///usr/local/project/file/"+fileName;
 //        String filePath = "E:\\qiyeweixin\\WXWork\\1688855207501340\\Cache\\File\\2024-09";
 //        String fileName = "专业技术工作总结.docx";4
-        String filePath = "E:\\";
+        String filePath = "/usr/local/project/file/";
 
         String s = wordToPdf(url, filePath, fileName);
         System.err.println(s);

--
Gitblit v1.7.1