Использование iText7 для добавления таблицы на определенной странице существующего PDF - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь добавить динамически созданную таблицу в динамически создаваемый существующий PDF. Я хочу «добавить» таблицу в определенную позицию на последней странице существующего PDF.

Мой текущий код основан на ответе Владимира Осипчука на этой ветке, он выглядит так:

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 голосов
/ 05 мая 2018

Нашел решение сам, мне было очень близко к нему. Я опубликую это на тот случай, если у кого-то возникнет такая же проблема:

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;

Таким образом, таблица «добавляется» сразу после конца текста последней страницы PDF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...