Springboot——整合Aspose实现table的字段填充与表格复制
文章目录
- 前言
- 业务场景
- 项目版本
- 功能实现
-
- 编码前模板解析
- 测试代码
-
- 定义数据接收类
- 数据填充
- 工具处理方法
- 效果展示
- 问题记录
-
- 导出word格式正常,但是pdf错位
前言
上一篇博客中,主要介绍了常规的几种docx
模板的赋值。比如常见的文本填充
、表格填充
、富文本填充
、图片填充
、超链接
等。
虽然基本的操作都能满足大部分的业务需求功能点,但总会有一些很特别的业务需要实现。
业务场景
在xxx合同
文件中,针对同时存在多个乙方
,需要进行填充操作。比如如下的这种模板
假设此时页面中记录十多个乙方,都需要将其填充至右侧,并能保证外围框能自适应的扩充。
项目版本
- maven 3.6.3
- jdk 17
- Aspose 16.8.0
功能实现
编码前模板解析
需要能按照数据的多少,达到自动的向下复制、填充和渲染。首先能想到的就是表格填充
。但这里的表格与普通表格不同。
- 普通表格
普通表格有标准的表头和数据行。每次遍历渲染数据行就能完成表格数据的填充。 - 特殊表格
就如上所示的表格,他其实是三行不同的数据结构构成一个表格的单元格。
将上面的模板进行拆解,如下所示:
并将其套入同一个文本框内,再隐藏所有的边框
在对应的乙方单元格
内,指定定位书签
和文字填充书签
。
测试代码
定义数据接收类
@Data
public class PartB2 {// 乙方单位名private String partBName;// 责任人private String partBUserName;private String partBDate;
}
数据填充
定义需要填充的数据并调用指定的工具类进行填充处理。
import com.aspose.words.Document;
import com.aspose.words.DocumentBuilder;
import com.aspose.words.License;
import com.aspose.words.SaveFormat;
import enty.PartB2;
import utils.AsposeUtils;
import utils.WordToPdfUtil;import java.io.File;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.UUID;/*** 由于区域块填充复制,三行构成一个cell时,会出现如下报错* Mail merge region 'partyBList' is badly formed. TableStart and TableEnd should be in the same section, same table row or same table cell.* ,将其替换另一种方案,如下*/
public class BlockCopyTest {public static void main(String[] args) throws Exception {// 加载证书 取数水印try {InputStream is = AsposeTest.class.getClassLoader().getResourceAsStream("licenses/license.xml");License asposeLic = new License();asposeLic.setLicense(is);} catch (Exception e) {throw new RuntimeException(e);}// 加载 Word 模板InputStream inWord = WordToPdfUtil.class.getClassLoader().getResourceAsStream("temp/block_12.docx");// 加载模板Document doc = new Document(inWord