一、模板文件示例
原始的模板示例是这样的
二、代码进行替换
import java.io.*;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import com.aimsphm.utils.StringUtils;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.*;
/**
* 通过word模板生成新的word工具类
**
*/
public class WordUtil {
/**
* 根据模板生成新word文档
* 判断表格是需要替换还是需要插入,判断逻辑有$为替换,表格无$为插入
* @param textMap 需要替换的信息集合
* @return 成功返回true,失败返回false
*/
public static void changWord(InputStream inputStream, Map<String, String> textMap,int height,int width) {
InputStream in = null;
try {
//获取docx解析对象
XWPFDocument document = new XWPFDocument(inputStream);
//解析替换文本段落对象
WordUtil.changeText(document, textMap);
//解析替换表格对象
WordUtil.changeTable(document, textMap);
//替换文本中的图片
WordUtil.changePicture(document,textMap,height,width);
//将文档转为输入流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write("E:\\a.docx".getBytes());
//文档写入流
document.write(baos);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 替换段落文本
* @param document docx解析对象
* @param textMap 需要替换的信息集合
*/
public static void changeText(XWPFDocument document, Map<String, String> textMap) {
//获取段落集合
List<XWPFParagraph> paragraphs = document.getParagraphs();
for (XWPFParagraph paragraph : paragraphs) {
//判断此段落时候需要进行替换
String text = paragraph.getText();
if(checkText(text)){
List<XWPFRun> runs = paragraph.getRuns();
for (XWPFRun run : runs) {
//替换模板原来位置
String value=changeValue(run.toString(), textMap);
if (StringUtils.isNotEmpty(value)) {