растянуть текстовое поле до максимальной высоты в отчетах jasper

Я думаю, что это более общая проблема. Я хотел бы использовать текстовое поле, которое получает динамические данные и не растягивается больше заданной максимальной высоты. Например, у меня есть текстовое поле, которое, если оно получает текст, который помещается в одну строку, текстовое поле будет высотой в одну строку, и у меня есть другие элементы под ним, которые будут перемещаться вверх с плавающим позиционированием. Или, если мне нужна максимальная высота в 3 строки, и если текст превышает это пространство, то остальные будут обрезаны. Я не хочу использовать выражения Java для обрезки этого текста, так как он не всегда точен. Я новичок в яшме, и я пытаюсь узнать, есть ли способ сделать это. Я сделал много поисков, но, возможно, я что-то пропустил, и я надеюсь, что кто-то может мне помочь. Спасибо


person y_silu    schedule 12.11.2013    source источник
comment
Если вы хотите отображать только n-строчные данные, вам следует создать текстовое поле с высотой, в которое поступают только n-строчные данные, и установить StretchOverflow false.   -  person user1791574    schedule 12.11.2013
comment
@user1791574 user1791574, текст динамический .. иногда содержит n строк данных, иногда k строк данных, но я хочу никогда не растягивать больше, чем заданная максимальная высота строки данных. Я не могу установить фиксированную высоту без StretchOverflow.   -  person y_silu    schedule 13.11.2013
comment
Мои данные n строк показывают максимальные данные строки. Читай внимательно. вы должны исправить высоту текстового поля.   -  person user1791574    schedule 13.11.2013
comment
@user1791574 user1791574, но когда текст умещается в 1 строку данных, а максимальная высота текстового поля установлена ​​​​на 3 строки данных, в этом случае я не хочу, чтобы мое текстовое поле имело 3 высоты данных строки, а только 1 высоту данных строки, поэтому другие элементы ниже будут плавать прямо под этим текстовым полем :) Я хочу, чтобы он растягивался с переполнением, но не более максимальной высоты данных строки   -  person y_silu    schedule 13.11.2013
comment
Затем вам нужно ограничить ваши данные со стороны сервера. Значит, предположим, что один из ваших PDF-файлов может содержать максимум 150 символов, и вам нужно максимум 3 строки, а также у вас есть 500 строк, тогда вам нужно вырезать последние 50 символов и получить 450 символов. Это поможет вам растянуть данные, а также сохранить максимальную приличность линии. Это не идеальное решение, но вы можете попробовать его.   -  person user1791574    schedule 13.11.2013
comment
Я пробовал это, но в моем PDF-файле используются разные шрифты для разных языков, поэтому он не очень точен. Если бы я не мог измерить текст на стороне сервера с заданным шрифтом. Есть ли способ передать фактический шрифт на серверную сторону и измерить его, используя настоящую библиотеку Jasper?   -  person y_silu    schedule 13.11.2013


Ответы (2)


Мне удалось решить эту проблему, расширив net.sf.jasperreports.engine.fill.TextMeasurer и переопределив метод initialize(); также мне пришлось расширить net.sf.jasperreports.engine.util.AbstractTextMeasurerFactory и переопределить метод createMeasurer(). Теперь, когда я хочу иметь максимальное количество строк без переполнения, я добавляю свойство в это текстовое поле (например, maxLines), которое передается в мою пользовательскую TextMeasurerFactory. Я надеюсь, что это помогло вам.

person y_silu    schedule 11.05.2015

У нас была аналогичная проблема при работе с JASPER Reports 4.5, где у нас был счет с заголовком и таблицей. Мы хотели, чтобы заголовок имел динамическую высоту, основанную на длине определенных полей (например, адрес, имя партнера и т. д.), но не более критического предела, иначе заголовок будет толкать таблицу и, таким образом, создавать беспорядок, разбивая ее по несколько страниц. Также счет-фактура не должен превышать 1 страницу. В конечном итоге нам пришлось переместить заголовок в раздел фона, где мы также поместили фон для таблицы, состоящий из вертикальных линий (чтобы он доходил до конца страницы формата А4) и белого непрозрачного квадрата. Таким образом, если заголовок превышает максимальную высоту, он будет находиться под фоном таблицы, обрезая текст. Это был желаемый эффект, который мы искали. Звучит безумно, но это сработало...

person Daniel Cristian    schedule 20.04.2018