From 4fcd294f79c626f3a8889d1e92a02d810c754747 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期四, 10 四月 2025 16:19:47 +0800
Subject: [PATCH] bug修改

---
 /dev/null                                                                       |   87 -----------------------------
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java |    8 ++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/WordUtil.java           |   34 +++++++----
 3 files changed, 27 insertions(+), 102 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java
index 8e4acc0..8060b13 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java
@@ -46,6 +46,7 @@
 import com.ruoyi.system.vo.CheckAcceptRecordVO;
 import com.ruoyi.system.vo.TContractVO;
 import com.ruoyi.web.controller.tool.NumberToChineseUtils;
+import com.ruoyi.web.controller.tool.TencentCosUtil;
 import com.ruoyi.web.controller.tool.WordUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -62,6 +63,7 @@
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -358,6 +360,8 @@
     }
     @Autowired
     private WordUtil wordUtil;
+    @Autowired
+    private TencentCosUtil tencentCosUtil;
     @ApiOperation(value = "生成合同附件")
     @PostMapping("/set")
     @Log(title = "生成合同附件", businessType = BusinessType.EXPORT)
@@ -531,13 +535,13 @@
         } else {
             fill(templateParam, "checkTime", "");
         }
-
+        String url = tencentCosUtil.downLoadFileImg(contract.getSignature());
         return wordUtil.generatePdf(
                 "/usr/local/project/file/",
                 templateFileName,
                 templateParam,
                 "租赁合同",
-                "/usr/local/project/file/");
+                "/usr/local/project/file/",url);
     }
 
     private BigDecimal extracted(TContract contract,TContractDTO dto) {
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/WordPdfGenerator.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/WordPdfGenerator.java
deleted file mode 100644
index 990e621..0000000
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/WordPdfGenerator.java
+++ /dev/null
@@ -1,106 +0,0 @@
-//package com.ruoyi.web.controller.tool;
-//
-//import org.apache.poi.xwpf.usermodel.*;
-//import java.io.*;
-//import java.time.LocalDateTime;
-//import java.time.format.DateTimeFormatter;
-//
-//public class WordPdfGenerator {
-//
-//    // 示例数据类
-//    public static class UserData {
-//        private String name;
-//        private String id;
-//        private String department;
-//        private LocalDateTime createTime;
-//
-//        public UserData(String name, String id, String department) {
-//            this.name = name;
-//            this.id = id;
-//            this.department = department;
-//            this.createTime = LocalDateTime.now();
-//        }
-//
-//        // getter方法省略
-//    }
-//
-//    public static void generateDocument(UserData userData, String outputPath) {
-//        try (XWPFDocument document = new XWPFDocument()) {
-//            // 创建标题
-//            XWPFParagraph title = document.createParagraph();
-//            title.setAlignment(ParagraphAlignment.CENTER);
-//            XWPFRun titleRun = title.createRun();
-//            titleRun.setText("用户信息表");
-//            titleRun.setBold(true);
-//            titleRun.setFontSize(20);
-//            titleRun.setFontFamily("宋体");
-//
-//            // 添加空行
-//            document.createParagraph();
-//
-//            // 创建表格
-//            XWPFTable table = document.createTable(5, 2);
-//            table.setWidth("100%");
-//
-//            // 设置表格数据
-//            setCellText(table, 0, "姓名", userData.name);
-//            setCellText(table, 1, "ID", userData.id);
-//            setCellText(table, 2, "部门", userData.department);
-//            setCellText(table, 3, "创建时间",
-//                userData.createTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-//
-//            // 保存Word文档
-//            String wordFile = outputPath + ".docx";
-//            try (FileOutputStream out = new FileOutputStream(wordFile)) {
-//                document.write(out);
-//            }
-//
-//            // 转换为PDF
-//            convertToPdf(wordFile, outputPath + ".pdf");
-//
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//    }
-//
-//    private static void setCellText(XWPFTable table, int row, String label, String value) {
-//        XWPFTableRow tableRow = table.getRow(row);
-//        tableRow.getCell(0).setText(label);
-//        tableRow.getCell(1).setText(value);
-//    }
-//
-//    private static void convertToPdf(String wordPath, String pdfPath) {
-//        try {
-//            // 使用LibreOffice进行转换
-//            ProcessBuilder pb = new ProcessBuilder(
-//                "soffice",
-//                "--headless",
-//                "--convert-to", "pdf",
-//                "--outdir", new File(pdfPath).getParent(),
-//                wordPath
-//            );
-//            Process process = pb.start();
-//
-//            // 等待转换完成
-//            int exitCode = process.waitFor();
-//            if (exitCode == 0) {
-//                System.out.println("PDF转换成功!");
-//            } else {
-//                System.out.println("PDF转换失败!");
-//            }
-//
-//            // 删除临时Word文件
-//            new File(wordPath).delete();
-//
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//    }
-//
-//    public static void main(String[] args) {
-//        // 示例使用
-//        UserData userData = new UserData("张三", "EMP001", "技术部");
-//        String outputPath = "E:\\";
-//        generateDocument(userData, outputPath);
-//    }
-//}
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/WordTemplateProcessor.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/WordTemplateProcessor.java
deleted file mode 100644
index f847008..0000000
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/WordTemplateProcessor.java
+++ /dev/null
@@ -1,87 +0,0 @@
-//package com.ruoyi.web.controller.tool;
-//
-//import org.apache.poi.xwpf.usermodel.*;
-//import java.io.*;
-//import java.util.*;
-//
-//public class WordTemplateProcessor {
-//
-//    public static void fillTemplate(String templatePath, String outputPath,Map<String, String> dataMap) {
-//        try {
-//            // 读取模板文件
-//            FileInputStream fis = new FileInputStream(templatePath);
-//            XWPFDocument document = new XWPFDocument(fis);
-//
-//            // 替换段落中的标记
-//            for (XWPFParagraph paragraph : document.getParagraphs()) {
-//                replaceParagraph(paragraph, dataMap);
-//            }
-//
-//            // 替换表格中的标记
-//            for (XWPFTable table : document.getTables()) {
-//                for (XWPFTableRow row : table.getRows()) {
-//                    for (XWPFTableCell cell : row.getTableCells()) {
-//                        for (XWPFParagraph paragraph : cell.getParagraphs()) {
-//                            replaceParagraph(paragraph, dataMap);
-//                        }
-//                    }
-//                }
-//            }
-//
-//            // 保存文件
-//            FileOutputStream fos = new FileOutputStream(outputPath);
-//            document.write(fos);
-//
-//            // 关闭资源
-//            fos.close();
-//            fis.close();
-//            document.close();
-//
-//            System.out.println("模板填充完成!文件保存在: " + outputPath);
-//
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//    }
-//
-//    private static void replaceParagraph(XWPFParagraph paragraph, Map<String, String> dataMap) {
-//        String paragraphText = paragraph.getText();
-//        for (Map.Entry<String, String> entry : dataMap.entrySet()) {
-//            if (paragraphText.contains(entry.getKey())) {
-//                List<XWPFRun> runs = paragraph.getRuns();
-//                TextSegment found = paragraph.searchText(entry.getKey(), new PositionInParagraph());
-//                if (found != null) {
-//                    // 替换文本
-//                    int beginRun = found.getBeginRun();
-//                    int endRun = found.getEndRun();
-//
-//                    if (beginRun >= 0 && endRun >= 0) {
-//                        // 删除原有runs
-//                        for (int runPos = beginRun; runPos <= endRun; runPos++) {
-//                            paragraph.removeRun(runPos);
-//                        }
-//                        // 创建新run
-//                        XWPFRun newRun = paragraph.insertNewRun(beginRun);
-//                        newRun.setText(entry.getValue());
-//                        // 复制原有格式
-//                        if (runs.size() > 0 && runs.get(0) != null) {
-//                            XWPFRun styleRun = runs.get(0);
-//                            newRun.setFontFamily(styleRun.getFontFamily());
-//                            newRun.setFontSize(styleRun.getFontSize());
-//                            newRun.setBold(styleRun.isBold());
-//                            newRun.setItalic(styleRun.isItalic());
-//                        }
-//                    }
-//                }
-//            }
-//        }
-//    }
-//
-//    public static void main(String[] args) {
-//
-//        String templatePath = "/path/to/template.docx";
-//        String outputPath = "/path/to/output.docx";
-//
-////        fillTemplate(templatePath, outputPath, user);
-//    }
-//}
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/WordUtil.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/WordUtil.java
index 1960ab0..267a564 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/WordUtil.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/WordUtil.java
@@ -13,14 +13,7 @@
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.Writer;
+import java.io.*;
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -118,10 +111,10 @@
     }
 
 
-    public String generatePdf(String basePackagePath, String templateFileName, Map<String,Object> templateParam, String fileName, String saveDirectory) {
+    public String generatePdf(String basePackagePath, String templateFileName, Map<String,Object> templateParam, String fileName, String saveDirectory,String url) {
         try {
 
-            fillTemplate(basePackagePath+templateFileName, saveDirectory+fileName+".docx", templateParam);
+            fillTemplate(basePackagePath+templateFileName, saveDirectory+fileName+".docx", templateParam,url);
 
             // 创建 Freemarker 的 Configuration 对象,设置默认的不兼容改进选项
 //            Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
@@ -173,7 +166,7 @@
         }
     }
 
-    public static void fillTemplate(String templatePath, String outputPath,Map<String, Object> dataMap) {
+    public static void fillTemplate(String templatePath, String outputPath,Map<String, Object> dataMap,String url) {
         try (FileInputStream fis = new FileInputStream(templatePath)) {
             // 设置默认编码为UTF-8
             System.setProperty("file.encoding", "UTF-8");
@@ -181,9 +174,24 @@
             XWPFDocument document = new XWPFDocument(fis);
             XWPFParagraph pic = document.createParagraph();
             XWPFRun picRun = pic.createRun();
+            Base64.Decoder decoder = Base64.getDecoder();
+            byte[] imageByte = decoder.decode(url);
+            InputStream stream = new ByteArrayInputStream(imageByte);
+            File tempFile = File.createTempFile("/usr/local/project/file/temp", ".jpg");
+            tempFile.deleteOnExit(); // 程序结束时删除文件
+
+            try (OutputStream out = new FileOutputStream(tempFile);
+                 InputStream in = stream) {
+                byte[] buffer = new byte[1024];
+                int length;
+                // 从原始流读取数据并写入临时文件
+                while ((length = in.read(buffer)) > 0) {
+                    out.write(buffer, 0, length);
+                }
+            }
             dataMap.put("${picture}", picRun.addPicture(
-                    new FileInputStream("/usr/local/project/file/1.jpg"), XWPFDocument.PICTURE_TYPE_JPEG,
-                    "/usr/local/project/file/1.jpg",
+                    new FileInputStream(tempFile), XWPFDocument.PICTURE_TYPE_JPEG,
+                    "/usr/local/project/file/sign.jpg",
                     Units.toEMU(60),
                     Units.toEMU(30)
             ));

--
Gitblit v1.7.1