我正在尝试完成一个项目,其要求与2015年与this question相关的要求几乎相同。
Bruno提供的答案是完美的,但与iText5有关。我对iText来说还比较陌生,并且极力地尝试着加快完成当前项目的速度。
我需要填充PDF文档的字段
我需要在填充部分下方添加一个表格,此后该表格需要跨越多个页面
有人可以协助将Bruno的答案从iText5转换为iText7吗?
提前非常感谢您提供的任何/所有帮助!
最佳答案
您应该这样写:
PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(DEST));
Document doc = new Document(pdfDoc);
PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDoc, true);
Map<String, PdfFormField> fields = form.getFormFields();
fields.get("Name").setValue("Jeniffer");
fields.get("Company").setValue("iText's next customer");
fields.get("Country").setValue("No Man's Land");
form.flattenFields();
Table table = new Table(UnitValue.createPercentArray(new float[]{1, 15}));
table.addHeaderCell("#");
table.addHeaderCell("description");
for (int i = 1; i <= 150; i++) {
table.addCell(String.valueOf(i));
table.addCell("test " + i);
}
doc.setRenderer(new DocumentRenderer(doc) {
@Override
protected LayoutArea updateCurrentArea(LayoutResult overflowResult) {
LayoutArea area = super.updateCurrentArea(overflowResult);
if (area.getPageNumber() == 1) {
area.getBBox().decreaseHeight(266);
}
return area;
}
});
doc.add(table);
doc.close();
可能最有趣的部分是关于扩展DocumentRenderer。此类的实例(与文档关联)处理其布局和覆盖的方法(updateCurrentArea),顾名思义,该方法用于布局的更新区域。
值得一提的是:所有iText5 SO答案都已移植到iText7中,您可以在iText网站上找到它们:https://developers.itextpdf.com/content/itext-7-examples。