前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java实现word自定义标签替换文本

java实现word自定义标签替换文本

作者头像
华创信息技术
发布2022-05-28 10:25:06
1.8K0
发布2022-05-28 10:25:06
举报
文章被收录于专栏:华创信息技术华创信息技术

文章时间:2020年12月5日15:12:52 解决问题:java实现word自定义标签替换文本

word 自定义标签替换导出功能,本文档只使用了基础标签替换、表格数据插入、图片替换功能,更多操作请参阅官方文档:http://deepoove.com/poi-tl/#_why_poi_tl

第一步 添加 maven

代码语言:javascript
复制
<dependency>
  <groupId>com.deepoove</groupId>
  <artifactId>poi-tl</artifactId>
  <version>1.8.2</version>
</dependency>

此功能还需 Apache POI 4.1.2+

代码语言:javascript
复制
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>

第二步 构建 word 模板文件

最基础的标签为“{{name}}”格式,name为你要替换的字段名,参考下图

基础标签.png
基础标签.png

表格数据插入,需在你要插入数据行的上一行添加标签,对应后台你要插入的数据的list变量名,然后在插入数据行用“[name]”标签替换list中数据,参考下图

表格.png
表格.png

图片替换,需提前在模板中插入图片,然后编辑图片替换文字为对应数据变量名的标签,方法参考下图

图片替换1.png
图片替换1.png
图片替换2.png
图片替换2.png

第三步 编写后台代码

需注意图片必须转为指定格式后才可替换,参考代码如下

代码语言:javascript
复制
        // 模板文件路径
        String templateUrl = "C:\\Users\\dev\\Desktop\\template.docx";

        // word文件生成路径
        String generateUrl ="C:\\Users\\dev\\Desktop\\generate.docx";

        // 此处使用了实体类,本方法也可使用map
        ContractDTO dto = new ContractDTO();

        // 基本标签替换
        dto.setName("某合同");
        dto.setDemander("");
        dto.setSupplier("乙方");
        dto.setCode("编号");
        dto.setSignDateStr("日期");

        // 表格数据插入
        List<ContractProductDTO> list = new ArrayList<>();
        ContractProductDTO contractProductDTO = new ContractProductDTO();
        contractProductDTO.setName("雪碧");
        contractProductDTO.setSpecification("500ml");
        contractProductDTO.setUnit("瓶");
        contractProductDTO.setAmount("1");
        contractProductDTO.setMoney("3");
        contractProductDTO.setPrice("3");
        list.add(contractProductDTO);
        list.add(contractProductDTO);
        dto.setProductList(list);

        // 图片替换
        String imgUrl = "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100";
        PictureRenderData img =  new PictureRenderData(50, 50, ".png", BytePictureUtils.getUrlBufferedImage(imgUrl));
        dto.setSignatureWord(img);

        // 加载表格配置
        HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy();
        Configure config = Configure.newBuilder()
                .bind("productList", policy).build();

        // 生成文件
        XWPFTemplate template = XWPFTemplate.compile(templateUrl, config).render(dto);
        try {
            template.writeToFile(generateUrl);
        } catch (IOException e) {
            e.printStackTrace();
        }

生成效果如下

生成.png
生成.png
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-12-5 1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一步 添加 maven
  • 第二步 构建 word 模板文件
  • 第三步 编写后台代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档