|
|
|
JasperReports - замена iText?
|
|||
|---|---|---|---|
|
#18+
Для пользователя в веб-приложении в нужный момент генерится PDF на основе каких-то данных. Для этой цели я использовал iText. Заковырок много было, но вроде работает нормально ... как мне казалось. Заказчик обратил внимание, что если делать несколько переводов строки или несколько пробелов (или табуляций), то все сводится к одному Whitespace. Вертикальные пробелы я поборол, горизонтальные пробелы - тоже. И долго возился с табуляцией (входящий html-документ может иметь символы табуляции), пока не вычитал, что iText банально не поддерживает табуляцию - ни "\t", ни " ;" ((( ... вся работа насмарку, потому что реализовать можно только таблицами, что автоматически увеличивает объем работы в разы, так как шрифт может скакать, а табуляция должна остаться табуляцией. Отсюда вопрос: JasperReports, судя по описанию, тоже умеет генерить PDF из HTML. А как у него обстоят дела с табуляцией? )) - Неохота двумя ногами влазить, не зная, есть ли подвох. Потому решил, что проще спросить тут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 02:18:17 |
|
||
|
JasperReports - замена iText?
|
|||
|---|---|---|---|
|
#18+
IDVsbruck, JasperReport, как и BIRT, умеет генерить PDF... с помощью iText, причём, из-за лицензионной политики iText не самой последней версии - 2.17. Если хотите реальной альтернативы, смотрите Apache FOP, но там надо уметь делать fo-файлы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 08:40:57 |
|
||
|
JasperReports - замена iText?
|
|||
|---|---|---|---|
|
#18+
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 простое, но там есть много хитростей, о которых трудно догадаться, поэтому надо заглядывать в книжку и программные примеры к ней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 22:56:44 |
|
||
|
JasperReports - замена iText?
|
|||
|---|---|---|---|
|
#18+
Во-первых, убалтывать не надо. Я не хочу тулить костыли, а прямолинейно сделать нельзя. Костылями я называю 2 возможных варианта: а) если текст простой, то можно вставлять таблицу с объединением, но если табуляций много, то можно замахаться с расчетами; б) вставлять контейнер с расчетной шириной от предыдущего Phrase/Chunk до места планируемого таба - либо спан (минус - по-любому нужен хоть один символ - кроме неразрывного пробела сложно придумать, но в случае, если контейнер нужен менее ширины пробела, то получится "ой"), либо растянутая картинка с прозрачным пикселем. Понятно, что это несерьезно. Во-вторых, iText - это не так, чтобы и совсем просто. У меня сложная генерация с динамическим количеством разделов, в которых динамическое количество страниц, причем, заголовок и футер на первой странице отличается от других. И еще пару нюансов типа нумераций и сносок. И это оказалось не так легко - благо, что EventHerper'ы есть, а также более-менее нормальное изложение примеров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 02:02:17 |
|
||
|
JasperReports - замена iText?
|
|||
|---|---|---|---|
|
#18+
IDVsbruckВо-вторых, iText - это не так, чтобы и совсем просто. У меня сложная генерация с динамическим количеством разделов, в которых динамическое количество страниц, причем, заголовок и футер на первой странице отличается от других. Ещё летающую тарелку рекомендую посмотреть, но опять же - работает через iText. В качестве альтернативы iText из бесплатных я знаю только PDFBox , но его возможности гораздо уже, чем у iText. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 08:43:57 |
|
||
|
JasperReports - замена iText?
|
|||
|---|---|---|---|
|
#18+
IDVsbruckВо-вторых, iText - это не так, чтобы и совсем просто. У меня сложная генерация с динамическим количеством разделов, в которых динамическое количество страниц, причем, заголовок и футер на первой странице отличается от других. И еще пару нюансов типа нумераций и сносок. И это оказалось не так легко - благо, что EventHerper'ы есть, а также более-менее нормальное изложение примеров. А расскажите, пожалуйста, как вы это сделали? У меня отчёт попроще, состоит из 2 страниц с разными page header и page footer? но Detail у них одинаковая, и в Detail на второй странице, должно быть продолжение Detailа первой страницы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2012, 16:33:35 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38002865&tid=2130753]: |
0ms |
get settings: |
17ms |
get forum list: |
25ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
42ms |
get topic data: |
20ms |
get forum data: |
5ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 287ms |
| total: | 472ms |

| 0 / 0 |
