一.需求
1.业务给了一个PDF文件当模板,要求将客户填写的信息对应在模板固定的位置,并且生成一个新的PDF图片和JPG图片,我们这叫开户书。
如图是临时编辑的模板PDF
二.实现步骤
1.用Adobe Acrobat DC 给填空的地方加上文本域。签名图片直接按坐标写入在固定位置不需要文本域。
2.读取PDF模板,取出文本域的字段,给字段赋值;
3.最后生成一个新的PDF图片写出到本地,生成一个新的JPG图片,以base64编码形式返回。
三.代码演示
1.用Adobe Acrobat DC打开模板文件,给PDF添加文本域
2.代码实现:为实现代码解耦,取出模板中的字段和赋值另外写了两个方法,主方法去调用这两个方法
/**
主方法
*/
public static void test() throws IOException, DocumentException {
//1.pdf模板位置
String fileName = "D:/MB.pdf";
//2.读模板PDF
InputStream input = new FileInputStream(new File(fileName));
PdfReader reader = new PdfReader(input);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
/* 3.图片的输入输出流 */
PdfStamper ps = new PdfStamper(reader, bos);
/* 4.取出模板中的所有字段并赋值 */
AcroFields fields = ps.getAcroFields();
//调用填充模板的方法fillData()和填充数据的方法data()
fillData(fields, data());
//5.字符缓冲区
StringBuilder sign_img_base64 = new StringBuilder();
//5.1 这里是前面图片的base64编码, 一般是由前端传过来。(也可以在网上在线转换)
sign_img_base64.append("iVBORw0KGgoAAAANSUhEUgAAAUYAA