Как динамически создать сноску с itext?
Мне нужно преобразовать файл XML в PDF. Я выбираю iText и XML Worker, чтобы обработать это.
XML содержит теги, которые я хотел бы использовать в качестве сносок в конечном документе. Я читал о PdfPageEventHelper, который я уже использую, чтобы установить верхний и нижний колонтитулы, но это не соответствует сноскам, учитывая, что содержимое является динамическим (переменный список сносок, если есть).
Я не могу исправить поля страницы для всех страниц: на некоторых страницах не будет сносок, и я не хочу поддерживать большой пробел внизу каждой страницы.
Есть ли способ сказать iText отложить обработку определенного тега или попросить его отобразить его в другой таблице / ячейке /... документа?
Любая помощь / идея будет высоко ценится!
1 ответ
Насколько я знаю, в iText пока нет механизма высокого уровня для создания сносок (начиная с версии 5.5.8).
Скорее всего, ситуация в этом отношении остается такой же, какой была в 2008 году, когда @BrunoLowagie написал этот ответ в списке рассылки поддержки iText:
Re: [iText-questions] Сноска
Бруно Лоуаги Пт, 22 февраля 2008 10:49:20 -0800
Маркос Фрагкакис писал:
Маркос Фрагкакис писал:
Всем привет,
Мне нужно создать сноски над определенными словами на той же странице. Есть ли способ сделать это?
Markos
Нужно ли использовать верхний индекс, чтобы нарисовать 1 над моим словом, а затем использовать событие onEndPage, чтобы сделать остальное? Есть ли более элегантное решение?
Там нет встроенного механизма для предоставления сносок.
Предлагаемый вами подход близок, но у вас может возникнуть проблема, связанная с тем, что в нижней части страницы недостаточно места для отображения сносок. Я боюсь, что даже менее элегантное решение, в котором вы будете работать с двумя объектами ColumnText, один для контента и один для сносок, будет единственным решением: вы отслеживаете необходимую высоту для сносок в последнем столбце и добавляете контент в прежний столбец, если сумма высот двух столбцов соответствует странице.
с уважением,
Bruno
Таким образом, похоже, что вы должны переключиться на этот механизм среднего уровня, создавая два ColumnText
экземпляры, один для обычного содержимого текущей страницы, один для сносок там.
Можно задаться вопросом, почему в iText нет механизма сносок высокого уровня. Учитывая то, как мало хитов я обнаружил, тем не менее, google'ing для iText и сносок, кажется, что вряд ли есть какие-либо запросы на эту функцию, по крайней мере, в открытом Интернете.
Если сноски являются альтернативным вариантом для вас, их должно быть гораздо проще реализовать, в частности, вы можете сделать это, используя методы высокого уровня.
Сноски - это заметки в нижней части страницы, в то время как сноски собираются под отдельным заголовком в конце главы, тома или всей работы. В отличие от сносок, сноски имеют то преимущество, что они не влияют на макет основного текста, но могут доставлять неудобства читателям, которым приходится перемещаться между основным текстом и сносками.
( Примечание (типография) в Википедии)
Здесь вам просто нужно собрать заметки в каком-то списке, и когда вы дойдете до конца главы / тома / работы, вы добавите заголовок, а затем все заметки как обычный контент.