Добавить объект onStartPage itextPdf кроме последней страницы - PullRequest
0 голосов
/ 12 октября 2018

Я добавляю прямоугольник поверх моей страницы для всех страниц, но я не хочу, чтобы прямоугольник был на последней странице.Вот мой код:

 @Override
    public void onStartPage(PdfWriter writer, Document output) {
        Font bold = new Font(Font.FontFamily.HELVETICA, 16, Font.BOLD);
        bold.setStyle(Font.UNDERLINE);
        bold.setColor(new BaseColor(171, 75, 15));
        PdfContentByte cb = writer.getDirectContent();
        // Bottom left coordinates x & y, followed by width, height and radius of corners.
        cb.roundRectangle(100f, 1180f, 400f, 100f, 5f);//I dont want this on the ;ast page
        cb.stroke();
        try {
            output.add(new Paragraph("STATEMENT OF ACCOUNT", bold));
            output.add(new Paragraph(new Phrase(new Chunk(" "))));
            output.add(new Paragraph(new Phrase(new Chunk(" "))));
            output.add(new Paragraph(new Phrase(new Chunk(" "))));
            output.add(new Paragraph(new Phrase(new Chunk(" "))));
            Image logo = Image.getInstance(imagepath);
            logo.setAbsolutePosition(780, 1230);
            logo.scaleAbsolute(200, 180);
            writer.getDirectContent().addImage(logo);
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

Есть ли способ пропустить или удалить этот прямоугольник с последней страницы документа?

1 Ответ

0 голосов
/ 12 октября 2018

Прежде всего, разработчики iText часто подчеркивали, что в onStartPage НЕ ДОЛЖНО добавлять контент в PDF.Причина в том, что при определенных обстоятельствах создаются неиспользуемые страницы и для них вызывается onStartPage, но затем они удаляются.Однако, если вы добавляете контент к ним в onStartPage, они не удаляются, а остаются в вашем документе.

Таким образом, всегда используйте onEndPage для добавления любого контента на страницу.


В вашем случае использования есть еще одна причина для использования onEndPage: Обычно становится ясно, что данная страница является последней страницей, когда последний бит контента был добавлен в документ.Обычно это происходит после того, как onStartPage был вызван для страницы, но до того, как onEndPage получил.

Таким образом, после того, как вы добавили последний бит обычного содержимого страницы в документ, вы можете просто установить флагв прослушивателе событий страницы текущая страница является последней страницей документа.Теперь следующий вызов onEndPage знает, что он обрабатывает последнюю страницу и может добавлять содержимое по-разному.

Таким образом, прослушиватель событий страницы будет выглядеть так

class MyPageEventListener extends PdfPageEventHelper {
    public boolean lastPage = false;

    @Override
    public void onEndPage(PdfWriter writer, Document output) {
        if (!lastPage) {
            [add extra content for page before the last one]
        } else {
            [add extra content for last page]
        }
    }

    ...
}

и использоваться так

Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, TARGET);
MyPageEventListener pageEventListener = new MyPageEventListener();
writer.setPageEvent(pageEventListener);
document.open();
[add all regular content to the document]
pageEventListener.lastPage = true;
document.close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...