2017-01-09 6 views
1

Как я могу автоматически обнаружить все тексты переполнения/обрезания в отчете Jasper?Как я могу обнаружить переполнение в отчетах Jasper?

My use case: У меня есть отчет на нескольких языках. Когда какой-то перевод изменен, я хочу убедиться, что следующий (возможно, более длинный текст) не будет усечен без необходимости просматривать каждое изменение.

Проверка должна работать на все элементы, даже те, которые растут. Представьте, что у меня есть текстовое поле, которое пытается расти и распространяется за границу страницы. Возможно, лучшее описание было бы следующим: я хочу знать, когда движок добавляет текст на страницу, которую пользователь не может видеть, независимо от причины.

+0

Попробуйте установить свойство stretch с переполнением в true. –

+0

@AaronDigulla Вам нужен какой-то «флаг»? Можно ли просто увеличить высоту textField в автоматическом режиме (по движку)? –

+0

@FahadAnjum Я хочу знать, когда текст не подходит. Я не хочу, чтобы элементы расти. –

ответ

0

Я нашел обходное решение: при переполнении текста JasperReports пропускает его в PDF (вместо того, чтобы полагаться на отсечение).

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

Это хорошо работает со статическими текстами.

Я создал gist with some demo code.

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

Быстрое решение для однострочных текстов - использовать среднюю ширину символов (для этого PDFont class имеет способ getAverageFontWidth()).

Среднее количество символов, которые вписываются в поле, равно boxWidth/averageCharWidth. Сравните длину строки с этим значением. Если это меньше, то вы, скорее всего, будете в безопасности. Если он длиннее, вы можете хотя бы записать предупреждение со строкой.

Через некоторое время вы можете собрать все эти журналы и попытаться найти лучший способ определить, какие тексты подходят, а какие нет.

Идеальным решением будет API, который передает шрифт, стиль и текст в JasperReports и получает ширину обратно.

Смежные вопросы