使用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)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球