zoukankan      html  css  js  c++  java
  • 使用poi-tl导出word文件的几个技巧

    1、前言

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

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

    2、关于复选框

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

      表现如下:

      勾选/不勾选在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<String> imgPathList = getImgPathList();
    			// 输出的图片对象列表
    			List<PictureRenderData> imgList = new ArrayList<PictureRenderData>();
    			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);
    

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

    作者:阿拉伯1999
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
    养成良好习惯,好文章随手顶一下。
  • 相关阅读:
    python web 2
    python web1(解析url)
    webstrom 今天突然要激活
    数组排序 记录一下
    浏览器添加随机数去除缓存
    vue-cli 安装报错
    vue 初始化项目报错
    深拷贝和浅拷贝
    css3 属性 clip-path
    js数组去重
  • 原文地址:https://www.cnblogs.com/alabo1999/p/15061713.html
Copyright © 2011-2022 走看看