docx 替换属性 poi-tl

之前写过一个POI 依据word模板 替换 ${xxx}属性 demo,正式上项目中,还有一些不足,比如说表格/图片/复选框等… 以poi的方式扩展起来很麻烦,还要整合/抽离一些方法,编码量太过于复杂。

由此采用新的方式去实现 POI -TL

官网:Poi-tl Documentation

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用

maven

<dependency>
  <groupId>com.deepoove</groupId>
  <artifactId>poi-tl</artifactId>
  <version>1.9.1</version>
</dependency>

Gradle

compile group: 'com.deepoove', name: 'poi-tl', version: '1.9.1'

使用:

模板样式:

在这里插入图片描述
效果:
在这里插入图片描述
若插入图片,则模板里应为 :${@urlImg}

 @Test
    public void test() throws Exception {
        Map<String, Object> datas = new HashMap<>();
        datas.put("A", "北京盛世科技有限公司");
        datas.put("B", "北京科技有限公司");
        datas.put("C", "12342213391139435111");
        datas.put("D", "201809823481");
        datas.put("E","华东");
        datas.put("F","北京海淀地块1");
        datas.put("G","A");
        datas.put("H","8");
        datas.put("I","1013");
        datas.put("J","李青书");
        datas.put("K","上海科技集团");
        datas.put("L","1000000000000000");
        datas.put("M","2015483247238");
        datas.put("N","自然人更换");
        datas.put("O","测试科技公司");
        // 打印成PDF时需设置,但不好使。 TextRenderData("\uF0FE",new Style("Wingdings 2",14))
        datas.put("AA",new TextRenderData("R",new Style("Wingdings 2",14)));
        datas.put("BB",new TextRenderData("R",new Style("Wingdings 2",14)));
        datas.put("CC",new TextRenderData("R",new Style("Wingdings 2",14)));
        datas.put("DD",new TextRenderData("R",new Style("Wingdings 2",14)));
        datas.put("EE",new TextRenderData("R",new Style("Wingdings 2",14)));
        datas.put("FF",new TextRenderData("R",new Style("Wingdings 2",14)));
        datas.put("GG",new TextRenderData("R",new Style("Wingdings 2",14)));
        datas.put("HH",new TextRenderData("R",new Style("Wingdings 2",14)));
        datas.put("II",new TextRenderData("R",new Style("Wingdings 2",14)));
        datas.put("JJ",new TextRenderData("R",new Style("Wingdings 2",14)));
        datas.put("KK",new TextRenderData("□",new Style("宋体",14)));
        datas.put("LL",new TextRenderData("R",new Style("Wingdings 2",14)));

        // 设置年月日
        datas.put("Date",DateUtils.formatDate(new Date(),"yyyy年MM月dd日"));
        datas.put("UserName","姜泥");

   	   // 图片
        datas.put("urlImg", Pictures.ofUrl("http://deepoove.com/images/icecream.png", PictureType.PNG)
                .size(300, 300).create());
        // 通过模板文件直接获取
       /* XWPFTemplate.compile("src/test/java/DocTemplate/testRenamed.docx").render(datas)
                .writeToFile("src/test/java/DocTemplate/testRenamed-print.docx");*/
        
        // 通过字节流方式
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        XWPFTemplate.compile("src/test/java/DocTemplate/test.docx").render(datas).writeAndClose(bos);
    }

当然如果有些同学更偏爱freemarker ${}的方式,poi-tl 也支持

// 官网实例
ConfigureBuilder builder = Configure.builder();
XWPFTemplate.compile("template.docx", builder.buid());
builder.buildGramer("${", "}");

// 我在项目中使用
XWPFTemplate.compile(fileInputStream, Configure.builder().buildGramer("${", "}")
                .build()).render(datas).writeAndClose(bos);

更多功能等…请参考官网

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
poi-tl是一种基于Apache POI和FreeMarker模板引擎的Java模板引擎,它可以帮助我们方便地生成各种格式的文档,包括Word、Excel和PowerPoint等。如果您想要替换Word文档中的图片,可以通过以下步骤实现: 1. 在Word文档中找到需要替换的图片,并记下它的编号或名称; 2. 在POI-TL模板中添加一个标签,用于指定图片的位置,例如:${picture}; 3. 在Java代码中使用POI-TL提供的API,通过标签名称找到对应的位置,并将新的图片插入到该位置。 以下是具体的Java代码实现示例: ```java // 创建POI-TL配置对象 Configuration config = new Configuration(); // 设置POI-TL使用的模板文件所在目录 config.setTemplateDir("templateDir"); // 设置POI-TL使用的模板文件名 config.setTemplateName("templateName.docx"); // 创建数据模型对象 Map<String, Object> data = new HashMap<>(); // 将需要替换的图片名称或编号放入数据模型中 data.put("picture", "newPicture.jpg"); // 创建POI-TL对象 DocxRenderData docx = new DocxRenderData(new File("templateName.docx"), data); // 将POI-TL对象写入新的Word文档中 XWPFTemplate template = XWPFTemplate.compile("output.docx", config).render(docx); template.write(new FileOutputStream("output.docx")); template.close(); ``` 在上面的代码中,我们首先创建了一个POI-TL配置对象,并设置了模板文件所在目录和模板文件名。然后创建了一个数据模型对象,并将需要替换的图片名称或编号放入该对象中。接着,我们创建了一个POI-TL对象,并将其写入新的Word文档中。 在模板文件中,我们使用了`${picture}`标签来指定图片的位置。在Java代码中,我们使用了POI-TL提供的API来找到该标签,并将新的图片插入到该位置。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值