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

  這樣,就可以正確顯示圖片列表了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM