xuhy
2025-04-10 9c0bfff1512e53dc810b1b227310ea89b4cddf01
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/WordUtil.java
@@ -5,6 +5,7 @@
import freemarker.template.Template;
import freemarker.template.TemplateException;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.*;
import org.springframework.mock.web.MockMultipartFile;
@@ -20,11 +21,7 @@
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -184,17 +181,17 @@
            XWPFDocument document = new XWPFDocument(fis);
            XWPFParagraph pic = document.createParagraph();
            XWPFRun picRun = pic.createRun();
            XWPFPicture xwpfPicture = picRun.addPicture(
                    new FileInputStream("/usr/local/project/file/1.jpg"), XWPFDocument.PICTURE_TYPE_JPEG,
                    "/usr/local/project/file/1.jpg",
                    Units.toEMU(60),
                    Units.toEMU(30)
            );
            dataMap.put("${picture}", xwpfPicture);
            Map<String, Object> dataMap1 = new HashMap<>();
//            dataMap.put("${picture}", picRun.addPicture(
//                    new FileInputStream("/usr/local/project/file/1.jpg"), XWPFDocument.PICTURE_TYPE_JPEG,
//                    "/usr/local/project/file/1.jpg",
//                    Units.toEMU(60),
//                    Units.toEMU(30)
//            ));
            // 处理段落
            for (XWPFParagraph paragraph : document.getParagraphs()) {
                replaceParagraph(paragraph, dataMap);
                replaceParagraph1(paragraph);
            }
            // 处理表格
@@ -283,6 +280,19 @@
            replaceRunRange(paragraph, info);
        }
    }
    private static void replaceParagraph1(XWPFParagraph paragraph) throws IOException, InvalidFormatException {
        List<XWPFRun> runs = paragraph.getRuns();
        for (XWPFRun r : runs) {
            String text = r.getText(0);
            if (text != null && text.contains("{{image}}")) {
                r.setText("", 0);
                FileInputStream is = new FileInputStream("/usr/local/project/file/1.jpg");
                r.addBreak();
                r.addPicture(is, XWPFDocument.PICTURE_TYPE_JPEG, "/usr/local/project/file/1.jpg", Units.toEMU(60), Units.toEMU(30));
                is.close();
            }
        }
    }
    private static String processPlaceholder(String text, Map<String, Object> dataMap) {
        // 处理括号内的占位符