itextpdf的AcroFields与PdfPTable结合使用

itextpdf的AcroFields与PdfPTable结合使用

有一个功能,目的是根据提供的pdf模板,导出一份列表的记录,模板中不全是表格,也有其他的表单内容。因为我一开始使用的是AcroFields这个类想去完成这样的需求,可是发现这样对列表其实不怎么友好,所以结合了PdfPTable实现。

1. 准备

首先就是需要准备好开发功能的工具

itextpdf的jar包引入

		<!-- PDF文件 -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.10</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>

wps,先做一个word文档的模板,再将它导出为pdf文件,这里都是免费的

在这里插入图片描述
然后使用一个处理pdf文档的软件–Adobe Acrobat DC,这个软件是收费的,经济能力有限的可以和我一样找一下其他资源。
接下来打开Adobe Acrobat DC,打开刚才保存格式为pdf的文件,然后选择右侧的“准备表单”
在这里插入图片描述

接着是在右侧表单字段,填写对应的字段名,有些不需要的填写的可以自行删除
在这里插入图片描述
因为AcroFields使用的是键值对一一对应的方式,所以,在不确定表格行数的时候,无论写多还是写少,都存在很大的问题。而且如果将表格中的cell单位格,一个个的设定key,相当繁琐。所以我们需要使用PdfPTable,将生成的表格插入一块预留区域。

在准备表单页面的上方,点击添加文本域。将此文本域作为表格的预留区,尽量偏左,因为表格插入的时候,起始位置是从左边开始算起,若是偏中区域,可能会导致表格因宽度问题导致超出纸张大小。

2. 代码实现

将刚才的表单模板保存好,放入项目的 src/main/resources 目录下

使用PdfReader读取刚才的表单内容,主要获取表单内的字段名(key键)

ByteArrayOutputStream bos = new ByteArrayOutputStream();
reader = new PdfReader(this.getClass().getResourceAsStream("/template/专家费发放申请表.pdf"));
PdfStamper stamper = new PdfStamper(reader, bos);
AcroFields form = stamper.getAcroFields();

然后是设置字体,因为默认提供的几种字体,不能很好的达到中文字体的那种效果。所以需要准备好支持中文的字体文件,我这里使用的是宋体的tff字体文件。
字体下载

//设置字体
BaseFont baseFont = BaseFont.createFont("template/SimSun.ttf",BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
form.addSubstitutionFont(baseFont);
Font font = new Font(baseFont, 11, Font.NORMAL);

接下来是将pdf的表单内容设置字体大小,这一点我还不清楚,表单的字体样式什么的,AcroFields控制的不是很好,需要手动去调整。

//设置字体大小
if (Obj
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值