使用iText7在现有PDF的特定页面中添加表格

时间:2018-04-27 08:03:04

标签: java itext

我尝试将动态创建的表添加到动态创建的现有PDF中。我想"追加"表格显示现有PDF的最后一页上的特定位置。

我目前的代码是基于Uladzimir Asipchuk在this帖子中给出的答案,它是这样的:

public byte[] completePDF(byte[] originalPDF){

    ByteArrayInputStream is = new ByteArrayInputStream(originalPDF);
    ByteArrayOutputStream os = new ByteArrayOutputStream();

    PdfDocument pdfDoc;
    try {
        pdfDoc = new PdfDocument(new PdfReader(is), new PdfWriter(os));
        final Document doc = new Document(pdfDoc);
         //FAKE TABLE TO TEST
        Table table = new Table(UnitValue.createPercentArray(new float[] {10f,90f}));

        for (int i = 0; i<150; i++){

            table.addCell(new String(new Integer(i).toString()));
            table.addCell("FAKE DATA");
        }

        doc.setRenderer(new DocumentRenderer(doc) {
            @Override
            protected LayoutArea updateCurrentArea(LayoutResult overflowResult) {

                int lastPage = doc.getPdfDocument().getNumberOfPages();

                LayoutArea area = super.updateCurrentArea(overflowResult);

                if (area.getPageNumber() == lastPage) {
                    PdfDocumentContentParser parser = new PdfDocumentContentParser(doc.getPdfDocument());
                    TextMarginFinder finder = parser.processContent(lastPage, new TextMarginFinder());
                    area.getBBox().decreaseHeight(finder.getTextRectangle().getHeight() + 30);
                }
                return area;
            }
        });

        doc.add(table);

        doc.close();
    } catch (Exception e) {
        return null;
    }

    return os.toByteArray();

}

此代码几乎完全符合我的要求(根据表格大小添加新页面,最后一页上的表格位置在该页面文本之后开始),但我不知道强制该表开始在最后一页上绘制。

有可能吗? 任何帮助将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:2)

我自己找到了解决方案,我真的很接近它。我会发布它以防有人遇到同样的问题:

if (area.getPageNumber() == lastPage) {
    PdfDocumentContentParser parser = new PdfDocumentContentParser(doc.getPdfDocument());
    TextMarginFinder finder = parser.processContent(lastPage, new TextMarginFinder());
    area.getBBox().decreaseHeight(finder.getTextRectangle().getHeight() + 30);
} else if (area.getPageNumber() < lastPage){
    area.getBBox().decreaseHeight(doc.getPdfDocument().getDefaultPageSize().getHeight());
}
return area;

通过这种方式,表格附加了#34;就在PDF最后一页的文本结束之后。