天天看點

使用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