天天看点

使用java poi 替换word模板里面的内容需求背景功能实现

使用java poi 替换word模板里面的内容

  • 需求背景
  • 功能实现
    • 对模板进一步加工,方便我们程序处理
    • java代码
    • 验证

需求背景

业务提供了一个word的签名模板,要求根据订单内容替换模板中的关键信息,需要替换的内容已明确。

使用java poi 替换word模板里面的内容需求背景功能实现

功能实现

对模板进一步加工,方便我们程序处理

第一步,我们需要做的就是对模板进行进一步加工处理,将替换的内容使用固定的标签标志。如下图所示

使用java poi 替换word模板里面的内容需求背景功能实现

(使用${}来声明关键词的原因是为了方便查看和防止原文中有相同的单词,类似freemark的标签,非必须的,可根据自己需要加工即可)。

java代码

@Override
    public File generateAttorneySignatureFile(Map<String, String> dataMap) throws IOException {
        File exportFile = new File("D:\\tmp\\written+form-模板标记1.doc");
        InputStream ins = new FileInputStream(new File("D:\\tmp\\written+form-模板标记.doc"));
        HWPFDocument document = new HWPFDocument(ins);
        // 读取word的文本内容
        Range bodyRange = document.getRange();
        // 根据第二部加工的key进行替换
        for (Map.Entry<String, String> entry : dataMap.entrySet()) {
            bodyRange.replaceText("${" + entry.getKey() + "}", entry.getValue());
        }
        //写入新文件
        try {
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            document.write(byteArrayOutputStream);
            OutputStream outputStream = new FileOutputStream(exportFile);
            outputStream.write(byteArrayOutputStream.toByteArray());
            outputStream.close();
        } catch (IOException e) {
            Logs.error(e.getMessage(), e);
        }
        return exportFile;
    }
           

验证

执行以下代码,进行验证,得到的新的签名文档内容如图所示:

Map<String, String> map = new HashMap<>();
        map.put("markName", "HE OR SHE");
        map.put("markType", "markType");
        map.put("applyName", "FeianlING");
        wordExportService.generateAttorneySignatureFile(map);
           
使用java poi 替换word模板里面的内容需求背景功能实现

done