思路
依据业务需要,获取理论业务数据,借助 itext 库性能,将业务数据填充入提前制作好的 PDF 模板中
操作步骤
- 制作 PDF 模板: 提前下载好 Adobe Acrobat Pro DC
- 成果展现
筹备 PDF, 如下图
编辑 PDF
筹备表单
设置字体
设置多行
模板表单标签
标签绑定具体业务数据
- pom 依赖
<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>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
- 具体实现
private ByteArrayOutputStream getYearData() {ClassPathResource classPathResource = new ClassPathResource("template/pdf-template.pdf");
PdfReader reader;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {reader = new PdfReader(classPathResource.getStream());
bos = new ByteArrayOutputStream();
PdfStamper stamper = new PdfStamper(reader, bos);
AcroFields form = stamper.getAcroFields();
Map<String, String> map = new HashMap<>();
map.put("changeTag1", ReportConstant.CHOOSE_FLAG);
map.put("changeTag2", ReportConstant.CHOOSE_FLAG);
map.put("passport0", "88484695274732");
map.put("passport1", "88484695274733");
map.put("signDate0", DateUtil.format(new Date(), ReportConstant.DATE_FORMAT_YMS));
map.put("signDate1", DateUtil.format(new Date(), ReportConstant.DATE_FORMAT_YMS));
map.put("validDate0", DateUtil.format(new Date(), ReportConstant.DATE_FORMAT_YM));
map.put("validDate1", DateUtil.format(new Date(), ReportConstant.DATE_FORMAT_YM));
map.put("orgName0", "贤一坊科技有限公司");
map.put("orgName1", "贤一坊科技有限公司");
map.put("remark0", "这是一个备注,外面的内容并不是有限长");
map.put("remark1", "这是一个备注,外面的内容并不是有限长");
this.fillPdfCellForm(map, form);
// true 代表生成的 PDF 文件不可编辑
stamper.setFormFlattening(true);
stamper.close();} catch (IOException e) {e.printStackTrace();
} catch (DocumentException e) {e.printStackTrace();
}
return bos;
}
private void fillPdfCellForm(Map<String, String> map, AcroFields form) throws IOException, DocumentException {for (Map.Entry entry : map.entrySet()) {String key = (String) entry.getKey();
String value = (String) entry.getValue();
form.setField(key, value);
}
}
成果展现
最初
我这里筹备了一线大厂面试材料和我原创的超硬核 PDF 技术文档,以及我为大家精心筹备的多套大厂面试题(不断更新中),须要的敌人能够关注我的公众号:前程有光,获取!心愿大家都能找到心仪的工作!