根据word模板生成word文件

公司有个生成合同内容的需求,需要近期完成,于是找了度娘整理了一下。

引入pom依赖


          org.apache.poi
          poi-ooxml
          4.1.2
 

首先得准备一下模板文件

image.png

读取解析文件

  InputStream in = null;
        try {
            in = new FileInputStream(templatePath);
            //获取docx解析对象
            document = new XWPFDocument(in);           
            document.close();
        }catch (Exception e){
            e.printStackTrace();
        }

解析段落标签

 /**
     * 替换段落文本
     *
     * @param document docx解析对象
     * @param textMap  需要替换的信息集合
     */
    public static void changeText(XWPFDocument document, Map textMap) {
        //获取段落集合
        List paragraphs = document.getParagraphs();
        for (XWPFParagraph paragraph : paragraphs) {
            //获取到段落中的所有文本内容
            String text = paragraph.getText();
         
        }
    }

判断是否需要替换内容

 /**
     * 判断文本中是否包含$
     *
     * @param text 文本
     * @return 包含返回true, 不包含返回false
     */
    public static boolean checkText(String text) {
        boolean check = false;
        if (text.indexOf("$") != -1) {
            check = true;
        }
        return check;
    }

根据map内容替换参数

 /**
     * 匹配传入信息集合与模板
     *
     * @param value   模板需要替换的区域
     * @param textMap 传入信息集合
     * @return 模板需要替换区域信息集合对应值
     */
    public static String changeValue(String value, Map textMap) {
        System.out.println("value::"+value+"::");
        String mapKey=value.trim().replace("${","").replace("}","");
        String mapValue=textMap.get(mapKey);
        if(StringUtils.isNotEmpty(mapValue)){
            value ="  "+mapValue+"  ";//value.replace("${"+mapKey+"}",mapValue);
        }
        //模板未匹配到区域替换为空
        if (checkText(value)) {
            value = "";
        }
        return value;
    }

# 替换模板内容
 List runs = paragraph.getRuns();
  for (XWPFRun run : runs) {   
       //替换模板原来位置
        run.setText(changeValue(run.toString(), textMap), 0);
  }

保存文件

 File dest = (new File(fileName)).getCanonicalFile();
            if (!dest.getParentFile().exists()) {
                dest.getParentFile().mkdirs();
            }
            changeText(document, replaceMap);
            document.write(new FileOutputStream(dest));

运行查看效果

image.png

源码传送门

word模板生成文件Util

你可能感兴趣的:(根据word模板生成word文件)