| | |
| | | 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; |
| | |
| | | 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; |
| | | |
| | |
| | | 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); |
| | | } |
| | | |
| | | // 处理表格 |
| | |
| | | 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) { |
| | | // 处理括号内的占位符 |