powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JasperReports - замена iText?
6 сообщений из 6, страница 1 из 1
JasperReports - замена iText?
    #37875739
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для пользователя в веб-приложении в нужный момент генерится PDF на основе каких-то данных. Для этой цели я использовал iText. Заковырок много было, но вроде работает нормально ... как мне казалось.

Заказчик обратил внимание, что если делать несколько переводов строки или несколько пробелов (или табуляций), то все сводится к одному Whitespace. Вертикальные пробелы я поборол, горизонтальные пробелы - тоже. И долго возился с табуляцией (входящий html-документ может иметь символы табуляции), пока не вычитал, что iText банально не поддерживает табуляцию - ни "\t", ни " ;" ((( ... вся работа насмарку, потому что реализовать можно только таблицами, что автоматически увеличивает объем работы в разы, так как шрифт может скакать, а табуляция должна остаться табуляцией.

Отсюда вопрос: JasperReports, судя по описанию, тоже умеет генерить PDF из HTML. А как у него обстоят дела с табуляцией? )) - Неохота двумя ногами влазить, не зная, есть ли подвох. Потому решил, что проще спросить тут.
...
Рейтинг: 0 / 0
JasperReports - замена iText?
    #37875832
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck,

JasperReport, как и BIRT, умеет генерить PDF... с помощью iText, причём, из-за лицензионной политики iText не самой последней версии - 2.17. Если хотите реальной альтернативы, смотрите Apache FOP, но там надо уметь делать fo-файлы.
...
Рейтинг: 0 / 0
JasperReports - замена iText?
    #37877406
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckпока не вычитал, что iText банально не поддерживает табуляцию - ни "\t", ни " ;" ((( ... вся работа насмарку, потому что реализовать можно только таблицами, что автоматически увеличивает объем работы в разы, так как шрифт может скакать, а табуляция должна остаться табуляцией.

Это. Уметь пользоваться надо, а не перескакивать с чего попало на что попало. Очевидно, что JasperReports работает через iText. При этом JasperReports позволяет создать отчёт без программирования, а iText даёт больший контроль над расположением и видом элементов документа.
Даже трудно понять, в чём проблема. Почему это iText не поддерживает табуляцию - там есть разные способы. Вот проверил - "\t" из строки действительно заменяется пробелом. Ну и что. Можно сначала заменить несколькими пробелами:
String s = "Йа\tстрочко";
String s2 = s.replaceAll ("[\\t]", " ");
Здесь я заменил табуляцию на 8 пробелов. Проверил - выводятся: "Йа строчко". Но делать табуляцию через \t - технология каменного века. В iText можно выводить текст в нужной позиции с помощью например ColumtText.showTextAligned(), или сформировать надпись (например, Paragraph), заменяя "\t" на пустые элементы Chunk нужной ширины. То есть получить фрагменты текста: String [] s2 = s.split("\\t"),
затем выводить их в нужные колонки с помощью ColumnText.showTextAligned или добавлять как Chunk-и (например) в Paragarph или Phrase, а между ними вставлять пустые Chunk-и для табуляции (надо написать несложную функцию для этого).
Хотя iText простое, но там есть много хитростей, о которых трудно догадаться, поэтому надо заглядывать в книжку и программные примеры к ней.
...
Рейтинг: 0 / 0
JasperReports - замена iText?
    #37877477
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, убалтывать не надо. Я не хочу тулить костыли, а прямолинейно сделать нельзя. Костылями я называю 2 возможных варианта: а) если текст простой, то можно вставлять таблицу с объединением, но если табуляций много, то можно замахаться с расчетами; б) вставлять контейнер с расчетной шириной от предыдущего Phrase/Chunk до места планируемого таба - либо спан (минус - по-любому нужен хоть один символ - кроме неразрывного пробела сложно придумать, но в случае, если контейнер нужен менее ширины пробела, то получится "ой"), либо растянутая картинка с прозрачным пикселем. Понятно, что это несерьезно.

Во-вторых, iText - это не так, чтобы и совсем просто. У меня сложная генерация с динамическим количеством разделов, в которых динамическое количество страниц, причем, заголовок и футер на первой странице отличается от других. И еще пару нюансов типа нумераций и сносок. И это оказалось не так легко - благо, что EventHerper'ы есть, а также более-менее нормальное изложение примеров.
...
Рейтинг: 0 / 0
JasperReports - замена iText?
    #37877579
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckВо-вторых, iText - это не так, чтобы и совсем просто. У меня сложная генерация с динамическим количеством разделов, в которых динамическое количество страниц, причем, заголовок и футер на первой странице отличается от других.
Ещё летающую тарелку рекомендую посмотреть, но опять же - работает через iText. В качестве альтернативы iText из бесплатных я знаю только PDFBox , но его возможности гораздо уже, чем у iText.
...
Рейтинг: 0 / 0
JasperReports - замена iText?
    #38002865
null_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IDVsbruckВо-вторых, iText - это не так, чтобы и совсем просто. У меня сложная генерация с динамическим количеством разделов, в которых динамическое количество страниц, причем, заголовок и футер на первой странице отличается от других. И еще пару нюансов типа нумераций и сносок. И это оказалось не так легко - благо, что EventHerper'ы есть, а также более-менее нормальное изложение примеров.
А расскажите, пожалуйста, как вы это сделали?
У меня отчёт попроще, состоит из 2 страниц с разными page header и page footer? но Detail у них одинаковая, и в Detail на второй странице, должно быть продолжение Detailа первой страницы
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JasperReports - замена iText?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]