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