Можно ли добавить сноску в зависимости от содержимого страницы при использовании itext? - PullRequest
0 голосов
/ 25 сентября 2018

Я использую Itext 5.5 и сейчас у меня есть пользовательская реализация PdfPageEventHelper, которая добавляет нижний колонтитул на страницу, содержащую информацию о номере страницы.

Недавние изменения в моем приложении приводят к существованию необходимыхсноски.То, как я создаю PDF (динамически создаваемый из списка компонентов), делает практически невозможным определение того, какая страница содержит какие элементы, поскольку это является частью настраиваемых параметров стиля.

Однако мне нужно добавить поясненияк сноскам.Подход, который я сейчас использую, заключается в том, чтобы просто уведомить PdfPageEventHelper, что где-то в документе есть хотя бы один элемент, которому нужна (в настоящее время только) сноска, и затем я добавляю пояснительную сноску к каждые Стр.

Это то, чего я хочу избежать, поскольку будущее может принести больше сносок и объяснений.Итак, вопрос:

Можно ли напрямую проанализировать содержимое текущей страницы и отсканировать текст маркера?Или есть другой способ узнать, нуждается ли текущая страница в пояснительной сноске?

Мои неудачные подходы до сих пор (всего в onEndPage(PdfWriter, Document)):

PdfContentByte cb = writer.getDirectContent();
PdfReader reader = new PdfReader(cb.toPdf(writer());
// this led to InvalidPdfException
----
ColumnText ct = new ColumnText(cb);
ct.getCompositeElements();
// returned null, I expected the current page contents
----
OutputStreamCounter oc = writer.getOs();
// did not expose any useful methods. also, cannot read from OutputStream

Поиск в Google привел к появлению десятковРезультаты - как добавить номер страницы или как добавить статический, пользовательский заголовок документа.Но ничего зависящего от страницы.

О, и это, что не очень полезно: Добавление условного обозначения PDF в определенные страницы в многостраничном документе PDF

которая кажется в основном той же самой проблемой, что и моя.

1 Ответ

0 голосов
/ 28 марта 2019

По сути, вам придется сделать это наоборот:

Просто добавьте универсальный тег к фрагменту маркера сноски.Затем слушатель события вашей страницы информируется об этом универсальном теге между началом страницы и ее концом.Если вы установите флаг в onGenericTag, следовательно, ваш метод onEndPage просто должен проверить (и позже сбросить) этот флаг и добавить сноску соответственно.

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

Для примера использования общих тегов посмотрите примеры с использованием метода Chunk.setGenericTag(String), например пример песочницы GenericFields .

(Первоначально я ссылался на URL сайта iText https://developers.itextpdf.com/examples/page-events-itext5/page-events-chunks, но из-за реструктуризации этого сайта он больше не ведет ни к чему конкретному; однако вы все равно можете найти копию исходной страницы с использованием машины обратного хода.)

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