java 替换docx文件中的字符串方法实现

2021-02-08 03:34:25 IT技术网 互联网
浏览

替换docx文件里面的 ${} 字符串

public class Main {
  public static void main(String[] args) throws Exception {
    String template = "C:UserslzhDesktop模板.docx";
    String outSrc = "C:UserslzhDesktop简历.docx";

    var is = new FileInputStream(template);
    var os = new FileOutputStream(outSrc);

    editDocx(os, is, xml -> {
      Map<String,String> map = new HashMap<>();
      map.put("${name}", "李**");
      map.put("${sex}", "男");
      map.put("${age}", "21");

      Pattern p = Pattern.compile("(${)([w]+)(})");
      Matcher m = p.matcher(xml);
      StringBuffer sb = new StringBuffer();
      while (m.find()) {
        String group = m.group();
        m.appendReplacement(sb, map.get(group));
      }
      m.appendTail(sb);
      xml = sb.toString();

      return xml;
    });
  }

  public static void editDocx(OutputStream bos,InputStream is, Process process){
    ZipInputStream zin = new ZipInputStream(is);
    ZipOutputStream zos = new ZipOutputStream(bos);
    try {
      ZipEntry entry;
      while((entry = zin.getNextEntry()) != null) {
        //把输入流的文件传到输出流中 如果是word/document.xml由我们输入
        zos.putNextEntry(new ZipEntry(entry.getName()));
        if("word/document.xml".equals(entry.getName())){
          String xml = new BufferedReader(new InputStreamReader(zin)).lines().collect(Collectors.joining(System.lineSeparator()));
          xml = process.process(xml);

          ByteArrayInputStream byteIn = new ByteArrayInputStream(xml.getBytes());
          int c;
          while ((c = byteIn.read()) != -1) {
            zos.write(c);
          }
          byteIn.close();
        }else {
          int c;
          while ((c = zin.read()) != -1) {
            zos.write(c);
          }
        }
      }
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      try {
        zos.close();
        zin.closeEntry();
        zin.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
}

interface Process {
  String process(String xml);
}

到此这篇关于java 替换docx文件中的字符串方法实现的文章就介绍到这了,更多相关java 替换docx字符串内容请搜索IT技术网以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT技术网!

您可能感兴趣的文章:

  • Java 实现repalceAll只替换第二个匹配到的字符串
  • java Matcher匹配头尾截取替换字符串的案例
  • Java字符串格式化,{}占位符根据名字替换实例
  • Java字符串替换函数replace()用法解析
  • java字符串中${}或者{}等的占位符替换工具类
  • Java实现的文本字符串操作工具类实例【数据替换,加密解密操作】
  • java字符串替换排序实例
  • Java 替换字符串中的回车换行符的方法