使用poi-tl创建word文档-实现了使用网络上的word模板、本地word模板;表格行动态生成;填充图片;多选框生成,空选和选中;列表生成。


摘要

为了实现一个可以自定义word模板并生成word文档的功能,我调研了当前市面上的几个工具包,综合研究比较后,决定选用poi-tl来实现这个功能。poi-tl是一个基于Apache POI的Word模板引擎,也是一个免费开源的Java类库,可以非常方便的加入到你的项目中,并且拥有着让人喜悦的特性,它拥有功能强大的插件,使用Word模板和数据创建很棒的Word文档。通过以下示例我们实现了使用网络上的word模板、本地word模板;表格行动态生成;填充图片;多选框生成,空选和选中;列表生成。


一、环境

  • Windows 10
  • office word 2019
  • java11

二、标签

poi-tl是一种无逻辑「logic-less」的模板引擎,没有复杂的控制结构和变量赋值,只有标签。标签由前后两个大括号组成,{{title}}是标签,{{?title}}也是标签,title是这个标签的名称,问号标识了标签类型,接下来我们来看看有哪些默认标签类型(用户可以创建新的标签类型,这属于更高级的话题)。

文本

{{var}}

图片

{{@var}}

表格

{{#var}}

列表

{{*var}}

三、使用步骤

引入依赖

implementation 'com.deepoove:poi-tl:1.12.1'

我们使用的word模板

在这里插入图片描述

生成的结果

在这里插入图片描述

码代码

    @Test
    void contextLoads() throws IOException {

        Referrer goods1 = new Referrer();
        goods1.name = "弗兰德";
        goods1.count = 3;

        Referrer goods2 = new Referrer();
        goods2.name = "伯恩斯";
        goods2.count = 10;

        List<Referrer> goodsList = new ArrayList<>();
        goodsList.add(goods1);
        goodsList.add(goods2);

        LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();

	// 使用循环表格行生成的插件
        Configure config = Configure.builder()
                .bind("referrer", policy).build();

        // 从URL获取输入流
        // URL url = new URL("https://file.server.xxxx.cn/%E9%99%84%E42%E8%81%94%E7%BD%91%E4%B8%93%E4%B8%9A%E6%9C%8D%E5%A1%A8.docx");
//        InputStream is = url.openStream();
        // 创建Word模板对象
//        XWPFTemplate template = XWPFTemplate.compile(is, config);

//        从磁盘获取word模板文件
        File file = new File("D://temp/poidemo.docx");
        XWPFTemplate template = XWPFTemplate.compile(file, config);

        template.render(
                new HashMap<String, Object>(){{
                    put("name", "侯莫");
                    put("familyName", "辛普森");
                    put("photo1", "https://bkimg.cdn.bcebos.com/pic/279759ee3d6d55fbae3c50b56b224f4a21a4ddae");

                    put("referrer", goodsList);
                    put("codeboy", new TextRenderData("R", new Style("Wingdings 2", 14)));
                    put("designer", new TextRenderData("\u25A1", new Style("Wingdings 2", 14)));
                    put("npdp", new TextRenderData("\u25A1", new Style("Wingdings 2", 14)));
                    put("pmp", new TextRenderData("R", new Style("Wingdings 2", 14)));

                    put("list11", Numberings.create("Plug-in grammar",
                            "Supports word text, pictures, table...",
                            "Not just templates"));
                }});

        template.writeAndClose(new FileOutputStream("output.docx"));
    }

}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常抱歉,之前的回答中有误,现在我会更全面地回答您的问题。 FreeMarker、POI 和 Poi-tl 都可以用于生成 Word 文档,但它们之间存在一些区别,主要体现在以下方面: 1. 生成方式 FreeMarker 是基于模板生成方式,需要程序员先创建一个 Word 文档模板,然后使用 FreeMarker 引擎将数据模型中的数据填充模板中,并生成一个完整的 Word 文档。 POI 和 Poi-tl 则是使用代码直接对 Word 文档进行操作,可以读取、写入、修改、创建 Word 文档,并提供了针对 Word 模板操作的 API,例如修改样式、替换变量、插入图片等。 2. 操作方法 FreeMarker 和 Poi-tl 都是使用 API 对 Word 文档进行操作,例如修改样式、替换变量、插入图片等;而 POI 则是使用 POI API 操作 Word 文档。 3. 使用场景 由于 FreeMarker 和 Poi-tl 是基于模板生成方式,因此适用于需要批量生成相似结构的 Word 文档的场景,例如生成合同、报告、简历等;而 POI 则适用于需要对 Word 文档进行灵活操作的场景,例如读取、修改、创建、删除等。 4. 功能 POI 和 Poi-tl 都提供了丰富的 API,可以对 Word 文档进行各种操作,例如读取、写入、修改、创建、删除、格式化等等;而 FreeMarker 则主要是通过填充模板生成 Word 文档,并提供了一些基本的操作 API,例如对模板中的变量进行替换、对模板中的样式进行修改、插入图片等等。 5. 性能 由于 FreeMarker 和 Poi-tl 都是基于模板生成方式,因此生成 Word 文档的性能相对较高,特别是在批量生成 Word 文档时更为明显;而 POI 则需要直接对文档进行操作,因此在生成 Word 文档时性能相对较低。 综上所述,FreeMarker、POI 和 Poi-tl 都是用于生成 Word 文档的工具,它们之间有着不同的生成方式、操作方法、使用场景、功能和性能。择哪个工具应根据具体的需求和场景进行判断。如果需要批量生成相似结构的 Word 文档,可以择 FreeMarker 或 Poi-tl;如果需要对 Word 文档进行灵活操作,可以择 POI。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值