Java利用POI-TL模板导出Word文档

这篇具有很好参考价值的文章主要介绍了Java利用POI-TL模板导出Word文档。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

poi-tl是什么

poi-tl是一个基于Apache POI的Word模板引擎,也是一个免费开源的Java类库,你可以非常方便的加入到你的项目中,并且拥有着让人喜悦的特性。

为什么选择poi-tl

方案移植性功能性易用性
Poi-tlJava跨平台Word模板引擎,基于Apache POI,提供更友好的API低代码,准备文档模板和数据即可
Apache POIJava跨平台Apache项目,封装了常见的文档操作,也可以操作底层XML结构文档不全,这里有一个教程:Apache POI Word快速入门
FreemarkerXML跨平台仅支持文本,很大的局限性不推荐,XML结构的代码几乎无法维护
OpenOffice部署OpenOffice,移植性较差-需要了解OpenOffice的API
HTML浏览器导出依赖浏览器的实现,移植性较差HTML不能很好的兼容Word的格式,样式糟糕-
Jacob、winlibWindows平台-复杂,完全不推荐使用

引入依赖

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


注意,poi-tl是基于poi的,如还引入poi需要注意版本

Java,POI-TL,Apache POI,Word模板引擎

怎么使用

下面介绍一下poi-tl的几种常见使用方法

1、文本

标签:{{text}}

数据模型:

  • String :文本

  • TextRenderData :有样式的文本

  • HyperlinkTextRenderData :超链接和锚点文本

  • Object :调用 toString() 方法转化为文本

模板:

 Java,POI-TL,Apache POI,Word模板引擎

代码示例:

    public static void main(String[] args) {

        try {
            /*文本*/
            Map<String, Object> map = new HashMap<>();
            map.put("name", "Sayi");
            map.put("author", new TextRenderData("000000", "Sayi"));
            map.put("link", new HyperlinkTextRenderData("website", "http://deepoove.com"));
            map.put("anchor", new HyperlinkTextRenderData("anchortxt", "anchor:appendix1"));

            XWPFTemplate.compile("D:\\testin.docx").render(map).writeToFile("D:\\1.docx");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}


 效果:

Java,POI-TL,Apache POI,Word模板引擎

2、图片

标签:{{@var}}

数据模型:

  • String :图片url或者本地路径,默认使用图片自身尺寸

  • PictureRenderData

  • ByteArrayPictureRenderData

  • FilePictureRenderData

  • UrlPictureRenderData

模板:

Java,POI-TL,Apache POI,Word模板引擎

代码示例:

 public static void main(String[] args) {

        try {

            Map<String, Object> map = new HashMap<>();
            
            /*图片*/
            map.put("image", "D:\\pic.jpg");       // 指定图片路径
            map.put("svg", "https://profile-avatar.yssmx.com/840f4549a5ae4144b243b203900b98c5_qq_38860250.jpg");         // svg图片
            map.put("image1", Pictures.ofLocal("D:\\pic.jpg").size(120, 120).create());            // 设置图片宽高
            map.put("streamImg", Pictures.ofStream(new FileInputStream("D:\\pic.jpg"), PictureType.JPEG)         // 图片流
                    .size(100, 120).create());
            map.put("urlImg", Pictures.ofUrl("https://profile-avatar.yssmx.com/840f4549a5ae4144b243b203900b98c5_qq_38860250.jpg")
                    .size(100, 100).create());            // 网络图片(注意网络耗时对系统可能的性能影响)

            XWPFTemplate.compile("D:\\testin.docx").render(map).writeToFile("D:\\2.docx");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


效果:

Java,POI-TL,Apache POI,Word模板引擎

 3、表格

标签:{{#tableTest}}

数据模型:

  • TableRenderData

推荐使用工厂 `Tables` 、 `Rows` 和 `Cells` 构建表格模型。

模板:

Java,POI-TL,Apache POI,Word模板引擎

代码示例:

    public static void main(String[] args) {

        try {

            Map<String, Object> map = new HashMap<>();
            /*表格*/
            RowRenderData row0 = Rows.of("姓名", "学历").textColor("FFFFFF")
                    .bgColor("4472C4").center().create();
            RowRenderData row1 = Rows.create("李四", "博士");
            map.put("tableTest", Tables.create(row0, row1));

            XWPFTemplate.compile("D:\\testin.docx").render(map).writeToFile("D:\\3.docx");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


 效果:

Java,POI-TL,Apache POI,Word模板引擎

 4、列表

标签:{{*var}}

数据模型:

  • List<String>

  • NumberingRenderData

推荐使用工厂 `Numberings` 构建列表模型。

模板:

Java,POI-TL,Apache POI,Word模板引擎

 代码示例:

    public static void main(String[] args) {

        try {

            Map<String, Object> map = new HashMap<>();
            /*列表*/
            map.put("listTest", Numberings.create("Plug-in grammar",
                    "Supports word text, pictures, table...",
                    "Not just templates"));
 
            XWPFTemplate.compile("D:\\testin.docx").render(map).writeToFile("D:\\4.docx");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


效果:

Java,POI-TL,Apache POI,Word模板引擎

5、嵌套

标签:{{+nested}}

数据模型:

  • DocxRenderData

推荐使用工厂 `Includes` 构建嵌套模型。

模板:

 Java,POI-TL,Apache POI,Word模板引擎

嵌套子模板:

Java,POI-TL,Apache POI,Word模板引擎

代码示例:

/**
 * @Title: PoiTlTest
 * @Description:
 * @author: leon
 * @date: 2023/3/14 19:11
 */
public class PoiTlTest {
    public static void main(String[] args) {

        try {

            Map<String, Object> map = new HashMap<>();
            /*嵌套*/
            List<AddrModel> subData = new ArrayList<>();
            subData.add(new AddrModel("Guangdong,China"));
            subData.add(new AddrModel("Shanghai,China"));
            map.put("nested", Includes.ofLocal("D:\\subInTest.docx").setRenderModel(subData).create());
            XWPFTemplate.compile("D:\\testin.docx").render(map).writeToFile("D:\\5.docx");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

class AddrModel {
    private String addr;
    public AddrModel(String addr) {
        this.addr = addr;
    }
    // Getter/Setter
}


 效果:

Java,POI-TL,Apache POI,Word模板引擎

6、条件判断显示

标签 :

{{?condition}}   需要显示的内容    {{/condition}} 

模板:

Java,POI-TL,Apache POI,Word模板引擎

代码示例:

   public static void main(String[] args) {

        try {

            Map<String, Object> map = new HashMap<>();
            /*条件判断显示*/
            map.put("condition1", false); //不显示,默认值也为false
            map.put("condition1Str","显示1");
            map.put("condition2", true);
            map.put("condition2Str","显示2");
            XWPFTemplate.compile("D:\\testin.docx").render(map).writeToFile("D:\\6.docx");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


 效果:

Java,POI-TL,Apache POI,Word模板引擎

 7、非空集合循环

标签也为 :

{{?songs}}   需要遍历的内容  {{/songs}} 

模板:

Java,POI-TL,Apache POI,Word模板引擎

代码示例:

    public static void main(String[] args) {

        try {

            Map<String, Object> map = new HashMap<>();
            /*非空集合循环*/
            Map<String, String> map1 = new HashMap<>();
            map1.put("star","周杰伦");
            map1.put("song","---兰亭序");
            Map<String, String> map2 = new HashMap<>();
            map2.put("star","林俊杰");
            map2.put("song","---江南");
            map.put("songs", Arrays.asList(map1,map2));

            XWPFTemplate.compile("D:\\testin.docx").render(map).writeToFile("D:\\7.docx");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


 效果:

Java,POI-TL,Apache POI,Word模板引擎

8、图表

图标有单系列图表、多系列图表、组合图表多种类型,下面只介绍单系列图表的使用:

标签:{{var}}

注意:该标签不是直接在模板定义,而是在:图表区格式—可选文字—标题(新版本Microsoft Office标签位置在:编辑替换文字-替换文字)。

下面是Microsoft Office的操作步骤:

点击插入,选择相应的图表

 Java,POI-TL,Apache POI,Word模板引擎

编辑替换文字-替换文字

Java,POI-TL,Apache POI,Word模板引擎

代码示例:

public static void main(String[] args) {
 try {

            Map<String, Object> map = new HashMap<>();
            /*图表*/
            //单系列图表指的是饼图(3D饼图)、圆环图等。
            map.put("chart1",Charts
                    .ofSingleSeries("综合测评结果统计", new String[] { "正常", "异常","其他" })
                    .series("badAndgood", new Integer[] { 19, 17,15})
                    .create());

            XWPFTemplate.compile("D:\\testin.docx").render(map).writeToFile("D:\\8.docx");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


 效果:

Java,POI-TL,Apache POI,Word模板引擎

总结

 上面是poi-tl的一些简单用例,如对其他功能感兴趣的朋友,可以去poi-tl的官网学习,地址为:http://deepoove.com/poi-tl/文章来源地址https://www.toymoban.com/news/detail-485055.html

到了这里,关于Java利用POI-TL模板导出Word文档的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java使用poi-tl1.9.1生成Word文档的几个小技巧

    目录 前言 一、poi-tl简介 1、什么是poi-tl 2、常见的word生成对比 3、poi-tl功能点 二、poi-tl文档生成 1、模板准备 2、目标参数填充 3、生成效果  三、可能会遇到的问题 1、混合图表生成报错 2、图表参数设置技巧  总结         也许在您的工作当中会碰到如下的一些场景,比

    2024年02月16日
    浏览(51)
  • JAVA poi-tl 制作word模板 表格数据行循环 带有复选框勾选的表格

            java项目实际开发中经常会遇到制作word表单且表格数据行循环功能,甚至带有复选框勾选功能,本文简单介绍如何制作模板以及使用poi-tl生成word。 提示:以下是本篇文章正文内容,下面案例可供参考 如果只用到word那么需要导入的依赖如下(本案例只需要如下2个依

    2024年04月12日
    浏览(40)
  • 根据模板动态生成word(三)使用poi-tl生成word

    @ 目录 一、前言 1、什么是poi-tl 2、官方信息 2.1 源码仓库 2.2 中文文档 2.3 开源协议 3、poi-tl的优势 3.1 poi-tl和其他模板引擎的对比 3.2 poi-tl Word模板引擎支持的功能 二、基本的使用配置 1、引入依赖 1.1 Maven 1.2 Gradle 2、配置 2.1 新建配置 2.2 标签前后缀替换 2.3 加载模板 2.4 填充数

    2024年02月13日
    浏览(53)
  • poi-tl导出word复杂表格(单元格合并,生成复杂表格)

    官方文档地址:http://deepoove.com/poi-tl/ 源码地址:https://github.com/Sayi/poi-tl poi-tl(poi template language)是Word模板引擎,使用Word模板和数据创建很棒的Word文档。 最近在做项目时候有一个关于导出Word的文件的需求,需要导出的word文件较大,并且格式比较复杂,使用poi-tl可以很好的

    2024年02月16日
    浏览(48)
  • Spring Boot 中使用 Poi-tl 渲染数据并生成 Word 文档

    本文 Demo 已收录到 demo-for-all-in-java 项目中,欢迎大家 star 支持!后续将持续更新! 产品经理急冲冲地走了过来。「现在需要将按这些数据生成一个 Word 报告文档,你来安排下」 项目中有这么一个需求,需要将用户填写的数据填充到一个 Word 文档中,而这个 Word 文档是人家给

    2024年02月09日
    浏览(50)
  • poi-tl设置图片(通过word模板替换关键字,然后转pdf文件并下载)

    选中图片右击  选择设置图片格式   例如word模板   maven依赖   读取  代码

    2024年02月11日
    浏览(61)
  • java 使用POI-TL根据word模版,生成word文件,含图片,富文本。

    1.引入mavna坐标` 2 .poi-tl-ext插件主要用于富文本内容格式在word展现 3.word模版创建 3.具体代码实现 4.本文的miniourl路径实质为网络路径的文件。

    2024年02月16日
    浏览(68)
  • POI-TL制作word

    本文相当于笔记,主要根据官方文档Poi-tl Documentation和poi-tl的使用(最全详解)_JavaSupeMan的博客-CSDN博客文章进行学习(上班够用) 两个实体类 下边测试类 word模板  生成结果:   如果想生成柱状图等,按照官网进行学习即可,以上两篇(官网,和博客学习够用)

    2024年02月10日
    浏览(52)
  • java利用模板导出word文档

    1.依赖: 1.普通数据 2.表格 3.1编辑模板:选中区域,按ctrl+F9,右键编辑域,选择邮件合并,输入参数 参数后面加“!”可以避免参数为null而报错,  3.2.代码:  3.3展示 1.数据类型 布尔型:等价于java的Boolean类型,不同的是不能直接输出,可转化为字符串输出 日期型:等价于

    2024年02月04日
    浏览(48)
  • 使用poi-tl向word插入图片、文本、表格行循环

    工作中难免会向word中操作数据,本文主要介绍poi-tl的使用,先来看效果图 核心介绍: 标签 1、插入文本标签 : {{var}} 2、插入图片标签: {{@var}} 操作步骤: 1、引入依赖 2、Java核心代码 官方网址:http://deepoove.com/poi-tl/ 1、准备模版,定义好需要的标签 2、查询模版 3、获取需要填

    2024年02月05日
    浏览(120)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包