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);
|
}
|
}
|