使用iText7(Java)将表添加到现有PDF并继续其他页面

时间:2017-05-18 00:51:59

标签: java pdf itext7

我正在尝试完成一个项目,其要求与2015年提出的this question相关的要求几乎相同。

布鲁诺提供的答案很完美,但与iText5有关。我对iText比较陌生,我正拼命想要快速完成当前的项目。

  • 我需要填充PDF文档的字段
  • 我需要在填充的部分下面添加一个表格,此后表格需要跨越多个页面

任何人都可以协助将Bruno的答案从iText5翻译成iText7吗?

非常感谢您提供任何/所有帮助!

1 个答案:

答案 0 :(得分:2)

你应该这样写:

    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