使用poi-tl导出word文件的几个技巧

1、前言

Poi-tl提供了基于word模板文件导出word文件的功能。文档地址:http://deepoove.com/poi-tl/。

用下来,总体感觉还是很方便的。但使用过程,有几个细节,值得记叙。

2、关于复选框

有一组文字,每个词前面有复选框,根据值的不同,可以打勾,也可以不打勾。

表现如下:

使用poi-tl导出word文件的几个技巧

勾选/不勾选在word中使用符号,即Wingdings 2字体。通过查Wingdings 2表:

勾选框:字符代码为0x0052,对应键盘字符R。

不勾选框:字符代码为0x00A3,由于超过ASCII码表值,没有对应键盘字符。

模板脚本:

{{actionItem0}}聚餐 {{actionItem1}}轰趴 {{actionItem2}}郊游 {{actionItem3}}唱歌

Spring Boot代码:

            // 字体Wingdings 2的符号
            TextRenderData selSymbol = new TextRenderData("R",new Style("Wingdings 2",10.5));
            TextRenderData unselSymbol = new TextRenderData("\u00A3",new Style("Wingdings 2",10.5));

            int actionItem = actionInfo.getActionItem();
            String fieldName = "";
            for(int i = 0; i < 4; i++) {
                fieldName = "actionItem" + i;
                int bitValue = (actionItem >> i) & 0x01;
                if (bitValue == 1) {
                    datas.put(fieldName, selSymbol);
                }else {
                    datas.put(fieldName, unselSymbol);
                }
            }

4个选项,使用bitmap编码,bit0表示是否聚餐,bit1表示是否轰趴,bit2表示是否郊游,bit3表示是否唱歌。

然后,就可以输出word文件了。

            // 配置
            Configure config = Configure.builder()
                    .useSpringEL()
                    .build();

            XWPFTemplate template = XWPFTemplate.compile(wordTemplate,config).render(datas);
            template.writeAndClose(new FileOutputStream(outputFile));

3、关于图片列表

如果单个图片,模板文件中使用{{@var}}即可输出,但如果是一个列表,就需要用区块对,然后怎样显示图片对象呢?例子中只有文本列表使用{{=#this}}表示文本项。经试验,用{{@#this}}表示图片项。

模板文件:

{{?imgList}}{{@#this}} {{/imgList}}

注意:{{@#this}}后面有一个空格,支持水平排列。

Spring Boot代码:

            // 获取图片路径列表
            List imgPathList = getImgPathList();
            // 输出的图片对象列表
            List imgList = new ArrayList();
            File imgFile=null;
            FileInputStream imgInputStream=null;
            BufferedImage image=null;
            for (int i =0; i < imgPathList.size(); i++){
                String imgPath = imgPathList.get(i);
                imgFile=new File(imgPath);
                if(imgFile.exists()) {
                    imgInputStream=new FileInputStream(imgFile);
                    image= ImageIO.read(imgInputStream);
                    // 将java图片转成PictureRenderData类型对象
                    PictureRenderData picItem = Pictures.ofBufferedImage(image, PictureType.PNG).size(60, 50).create();
                    imgList.add(picItem);
                }
            }
            datas.put("imgList",imgList);

这样,就可以正确显示图片列表了。

Original: https://www.cnblogs.com/alabo1999/p/15061713.html
Author: 阿拉伯1999
Title: 使用poi-tl导出word文件的几个技巧

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/644366/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Logback 日志框架

    Logback 是由 Log4j 创始人设计的又一个开源日志组件。作为流行的 Log4j 项目的继承者,在 log4j 1.x 停止的地方接手。其架构非常通用,可以在不同的情况下应…

    技术杂谈 2023年7月11日
    044
  • zz1

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/lexus/p/7891584.htmlAuthor: …

    技术杂谈 2023年5月31日
    051
  • Attention Is All You Need

    此篇文章内容源自 Attention Is All You Need,若侵犯版权,请告知本人删帖。 原论文下载地址: https://papers.nips.cc/paper/20…

    技术杂谈 2023年5月30日
    099
  • crash命令 —— p

    参考:https://crash-utility.github.io/help_pages/p.html 用法: 查看内核中的一些全局符号的内容 p <符号名><…

    技术杂谈 2023年5月30日
    077
  • How to kill server when seeing “EADDRINUSE: address already in use”

    How to kill server when seeing “EADDRINUSE: address already in use” https://st…

    技术杂谈 2023年5月31日
    082
  • Postgres14.4(Docker安装)

    Postgres14.4(Docker安装) 一,Docker拉取镜像 docker pull postgres:14.4 #检查镜像是否拉取成功 docker images | …

    技术杂谈 2023年7月11日
    047
  • 经济

    《哈佛笔记》曼昆的《宏观经济学》《预测》 洪灏的微博 微信 公众号。 Original: https://www.cnblogs.com/rgqancy/p/15877178.ht…

    技术杂谈 2023年6月1日
    075
  • 8086汇编 杂项案例

    8086汇编 杂项案例 一、案例1 问题:完成下面的程序,利用栈,将程序中定义的数据逆序存放。 注:利用栈实现数据的逆至1)创建字存储数据2)将数据存放到通用寄存器3)将通用寄存器…

    技术杂谈 2023年6月1日
    083
  • Jedis操作hash和Jedis操作List

    Jedis操作hash和Jedis操作List 哈希类型 hash :map个时间哦 hset hget hgetAll package com.ailyt.jiedis.test…

    技术杂谈 2023年6月21日
    096
  • 018 磁盘 IO 性能监控/压测工具(sar、iotop、fio、iostat)

    1 sar 命令查看当前磁盘 IO 读写 (1)sar 工具安装 (2)sar 查看磁盘IO读写情况 2 iotop 命令查看磁盘 IO 性能 (1)iotop 工具安装 (2)i…

    技术杂谈 2023年7月10日
    071
  • Hbase概述与读写流程

    Hbase概述与读写流程 一、Hbase概述 Hbase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,用于存储海量的结构化或者半结构化,非结构化的数据(底层是字节数组做存…

    技术杂谈 2023年7月11日
    053
  • Feign和Ribbon的重试机制

    Feign和Ribbon的重试机制 Ribbon的重试机制 配置 ribbon: ReadTimeout: 2000 ConnectTimeout: 2000 MaxAutoRet…

    技术杂谈 2023年5月31日
    084
  • [转]到底什么是“信创”

    本文转自:https://m.thepaper.cn/baijiahao_13661473 以下文章来源于鲜枣课堂 ,作者小枣君 鲜枣课堂 学通信,学5G,就上鲜枣课堂! 我已加入…

    技术杂谈 2023年5月30日
    078
  • 网络流 HLPP 板子

    #include using namespace std; const int MM=4e5+5,inf=0x3f3f3f3f; int n,m,s,t,tot=1,a; int …

    技术杂谈 2023年6月21日
    062
  • vue项目去除访问路径中的#号(Vue 访问路径开启history 模式)

    最近学习vue过程中,发现路径当中总是存在一个#号,比如这个: 这种情况是因为在入口js文件中,如果你不更改设置的话,vue会默认使用hash模式,该模式下回将路径格式化为 # 开…

    技术杂谈 2023年7月11日
    071
  • 谈服务可用性监控

    一个服务的监控从整体考虑,要达到哪些才能算是完善的?我想,如果没有一个全局性的监控思考,一个服务的监控即使加的再多也是会有监控盲区的。 从基础机器到上层业务,分为三个不同层次:系统…

    技术杂谈 2023年6月1日
    070
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球