前言
本文章是有一个word文档的模板,在这个模板中,把自己要的内容添加到指定位置。
思路
获取模板的所有内容(InputStream)
找到你要填充的地方
设置占位符
进行替换
下载替换好的word文档(OutputStream)
-
准备模板
我先在resources中准备好几个模板
-
在模板中添加占位符
-
读取模板
我的环境是dev环境,所以我在application[dev].properties配置了存储模板的文件路径
在你所在的类中添加这一段(读取你在配置文件中的模板存储路径)
写一个方法,读取文件
//形参templateFileName是你模板名字
//使用InputStream读取
private InputStream prepareFile(String templateFileName) throws IOException {
return new FileInputStream(templateFilePath + "/" + templateFileName);
}
把模板读取出来
//调用上面写的方法prepareFile把文件名传入
InputStream template = prepareFile("XXX.docx");
//创建XWPFDocument对象,表示Word文档
XWPFDocument document = new XWPFDocument(template);
-
替换内容
//获取所有段落
List<XWPFParagraph> paragraphList = document.getParagraphs();
//遍历段落
for (int i = 0; i < paragraphList.size(); i++) {
//获取每个段落
XWPFParagraph paragraph = paragraphList.get(i);
//获取每个段落中的内容
List<XWPFRun> runs = paragraph.getRuns();
//循环段落内容
for (int i1 = 0; i1 < runs.size(); i1++) {
//调用自定义方法replacePlaceholderV2替换内容
if (runs.get(i1).toString().contains("name")) {
replacePlaceholderV2(runs.get(i1), "name", infoPojo.getPatientName());
}
}
}
自定义方法replacePlaceholderV2
/**
* @param run 文本内容
* @param placeholder 模板中自定义的占位符
* @param replacement 替换的内容
* @throws IOException
* @throws InvalidFormatException
*/
private static void replacePlaceholderV2(XWPFRun run, String placeholder, String replacement) throws IOException, InvalidFormatException {
// 获取当前XWPFRun对象的文本内容
String text = run.getText(0);
// 判断文本内容是否包含占位符
if (text != null && text.contains(placeholder)) {
// 替换文本中的占位符为指定的替换内容,并更新XWPFRun的文本内容
run.setText(text.replace(placeholder, replacement.replace("[", "").replace("]", "")), 0);
}
}
下载替换内容后的模板
// 将填充后的文档写入输出流
document.write(output);
// 关闭模板输入流和文档
template.close();
document.close();
-
最终成果