В конце последней страницы я хочу напечатать подпись. Бывают ситуации, когда длина документа делает подпись и только подпись печатается на следующей странице. Нехорошо иметь целую страницу только с подписью, в то время как весь отчет находится на предыдущих страницах.
Кто-нибудь сталкивался с этими проблемами раньше и нашел рабочее решение?
Заранее спасибо,
Тутудакис Михаил
Что касается вашей второй проблемы: какое поведение было бы для вас желательным? Если вы не можете разместить подпись на последней странице (и вам нужно создать новую), хотите ли вы переместить некоторый контент на следующую страницу вместе с подписью?
Да, перемещение некоторого контента было бы самым простым решением, но как я могу узнать, что на последней странице существуют только подписи?




Что касается вашего второго вопроса, рассмотрите возможность использования методов setKeepTogether или setKeepWithNext.
Давайте рассмотрим любой подход:
1) setKeepTogether спроектирован так, чтобы дочерние элементы контейнера были максимально объединены. Это означает, что iText не будет разделять контейнер и переместит весь контейнер на сетевую страницу, если только контейнер не может быть размещен там.
for (int i = 0; i < 28; i++) {
doc.add(new Paragraph("\n"));
}
Div div = new Div();
div.add(new Paragraph("Please, keep me with the next element").setKeepWithNext(true));
div.add(new Paragraph("I don't want to be alone!"));
div.setKeepTogether(true);
doc.add(div);
Итоговый pdf-файл выглядит следующим образом (обратите внимание, что места для параграфа «пожалуйста» на первой странице достаточно):

2) setKeepWithNext был разработан таким образом, чтобы конец первого элемента и начало следующего элемента находились в одной области.
(!) Обратите внимание, что это будет работать только для элементов высокого уровня, то есть элементов, добавленных к корневому элементу.
for (int i = 0; i < 28; i++) {
doc.add(new Paragraph("\n"));
}
doc.add(new Paragraph("Please, keep me with the next element").setKeepWithNext(true));
doc.add(new Paragraph("I don't want to be alone!"));
Результат тот же.
Что касается вашего первого вопроса, мне очень не терпится увидеть, что вы написали. Я верю, что с помощью событий вы сможете добиться желаемого. Пожалуйста, взгляните на следующие образцы iText: https://github.com/itext/i7js-examples/tree/develop/src/test/java/com/itextpdf/samples/sandbox/events и https://github.com/itext/i7js-examples/blob/develop/src/test/java/com/itextpdf/samples/sandbox/events/VariableHeader.java, в частности.
Также для более разумной верстки могу предложить использовать Canvas (и, следовательно, высокоуровневый API), а не PdfCanvas (как в упомянутых примерах).
Тем не менее, это похоже на другой вопрос.
Div с setKeepTogether(true) работал как шарм, не позволяя печатать подписи в одиночку на пустой странице. Однако я все еще борюсь с первой из своих проблем... Я опубликую дополнительную информацию, как только попробую образцы, которые вы упомянули выше. Большое спасибо.
Я прочитал примеры, которые вы упомянули, но мой заголовок представляет собой абзац с графикой или контейнер Div с текстом и изображениями. Примеры относятся только к тексту, и я еще не понял, как можно импортировать Div или Paragraph в pdfCanvas. Какие-либо предложения??
Поскольку это отдельный вопрос, не могли бы вы создать новый тикет для этой проблемы? У меня тоже есть решение, но я просто не хочу, чтобы этот ответ запутался.
Я уже ответил на него. Что касается этого вопроса: пожалуйста, примите ответ, если он вас устраивает
Пожалуйста, не могли бы вы показать, что вы уже написали? Не могли бы вы немного расширить «Я пытался сделать это с помощью заголовков, но не смог заставить его работать правильно. Я исправил это для определенного отчета, но в разных отчетах с разной длиной смещение было ужасным»?