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

 更新时间:2021年02月07日 11:51:21   作者:灬都是个谜  
这篇文章主要介绍了java 替换docx文件中的字符串方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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

public class Main {
  public static void main(String[] args) throws Exception {
    String template = "C:\\Users\\lzh\\Desktop\\模板.docx";
    String outSrc = "C:\\Users\\lzh\\Desktop\\简历.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字符串内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java基于分治算法实现的棋盘覆盖问题示例

    Java基于分治算法实现的棋盘覆盖问题示例

    这篇文章主要介绍了Java基于分治算法实现的棋盘覆盖问题,简单描述了棋盘覆盖问题,并结合具体实例形式分析了java基于分治算法实现棋盘覆盖问题的相关操作技巧,需要的朋友可以参考下
    2017-11-11
  • java实现汉字转unicode与汉字转16进制实例

    java实现汉字转unicode与汉字转16进制实例

    这篇文章主要介绍了java实现汉字转unicode与汉字转16进制的实现方法,是Java操作汉字编码转换的一个典型应用,非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • Spring Boot统一异常处理详解

    Spring Boot统一异常处理详解

    我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况。这个时候就需要统一异常处理了,这篇文章主要给大家介绍了Spring Boot如何进行统一异常处理的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-02-02
  • Java实现一个顺序表的完整代码

    Java实现一个顺序表的完整代码

    顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般采用数组存储。在数组上完成数据的增删减改。顺序表的底层是一个数组
    2021-04-04
  • mybatis中insert返回值为1,但数据库却没有数据

    mybatis中insert返回值为1,但数据库却没有数据

    这篇文章主要介绍了mybatis中insert返回值为1,但数据库却没有数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Java8的default和static关键字的使用讲解

    Java8的default和static关键字的使用讲解

    今天小编就为大家分享一篇关于Java8的default和static关键字的使用讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • springboot上传文件,url直接访问资源问题

    springboot上传文件,url直接访问资源问题

    这篇文章主要介绍了springboot上传文件,url直接访问资源问题。具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Elasticsearch常见字段映射类型之scaled_float解读

    Elasticsearch常见字段映射类型之scaled_float解读

    这篇文章主要介绍了Elasticsearch常见字段映射类型之scaled_float解读。具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • IntelliJ IDEA : .java文件左下角显示

    IntelliJ IDEA : .java文件左下角显示"J"图标的问题

    IntelliJ IDEA : .java文件 左下角显示“J”,并且不能执行代码,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-10-10
  • Spring操作JdbcTemplate数据库的方法学习

    Spring操作JdbcTemplate数据库的方法学习

    这篇文章主要为大家介绍了Spring操作JdbcTemplate数据库方法学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05

最新评论