Как обеспечить, чтобы iText PageEvent.onStartPage() вызывался до того, как содержимое было записано в документ

121
15

Обычно onStartPage() называется до, все записи записываются.


В моем случае использования его каким-то образом вызывается после некоторый контент записывается на новую страницу.


Что я делаю:


    Создайте Paragraph с некоторым введением
    Создайте элемент с помощью setKeepTogether(true). Этот элемент настолько велик, что iText разместит его на следующей странице (что такое правильное поведение).
    Теперь onStartPage() называется после, элемент добавляется на новую страницу.

Я полагаюсь на этот метод, потому что мне нужно добавить небольшой текст, например продолжение xx в начало страницы.


В этом примере воспроизводится поведение:


public class Main {
public static String someTompic = null;

public static void main(final String[] args) throws Exception {
final Document document = new Document(PageSize.A7);

final PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("text.pdf"));

// This PageEventHelper should write a small text "Continuation: ..." at the beginning if
// a PageBreak was forced by "keepTogether"
writer.setPageEvent(new PdfPageEventHelper() {

@Override
public void onStartPage(final PdfWriter writer, final Document document) {
try {
if (someTompic != null)
document.add(new Paragraph("Continuation: " + someTompic));
}
catch (final DocumentException e) {
e.printStackTrace();
}
}
});

document.open();

// Now I add the introduction text
document.add(new Paragraph("A nice \nIntroduction \nover some lines."));

// Now I put my "huge" thing. If this breaks,
// the first line of the new page should be Continuation of ...
someTompic = "smth.";

final Paragraph paragraph = new Paragraph("What is \nthe answer \nto life the \nuniverse and \neverything?\n\nThe Answer to \nthis question \nis:\n42");
paragraph.setKeepTogether(true);
document.add(paragraph);

document.close();
}
}


Эта ссылка показывает разбитый PDF: PDF на Github

спросил(а) 2014-03-04T14:48:00+04:00 6 лет, 6 месяцев назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема