Выделите текст в средстве просмотра отчетов Jasper - PullRequest
1 голос
/ 09 апреля 2009

Я хочу выделить некоторые части отчетов, которые я генерирую для отображения.
Я не хочу менять определение отчета. Я хочу выделить вывод во время выполнения.

Но JRViewer, который я использую, на самом деле не имеет большого количества API.
И манипулирование объектом JasperPrint с помощью setForecolor / setBackcolor перед его отображением, похоже, не изменило вывод.

Есть идеи? Или я должен перегрузить / переопределить зрителя? Не будет большой проблемой, так как это открытый код, но я бы хотел не изобретать велосипед заново.

1 Ответ

0 голосов
/ 14 апреля 2009

Похоже, я должен сам ответить на свои вопросы ... снова.

Я перегружал класс JRViewer (фактически скопировал код JRViewer, потому что ни одна из интересных панелей не была доступна) и добавил несколько методов подсветки для выполнения следующих действий:

На основе шаблонов данные JasperPrint используют - как следует из названия - шаблоны. Это означает, что у текстовых объектов нет собственного стиля, они используют стиль своего шаблона.
Именно поэтому setForecolor ничего не делал - реализация JRTemplatePrintElement просто пуста.

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

UPDATE:
Однако это имеет неприятный побочный эффект для файловых (виртуализированных) отчетов. Они, очевидно, сохраняют любые изменения, которые вы вносите в элементы во время просмотра страниц. Однако если в то же время средство просмотра заставляет виртуализатор отбрасывать элементы, на которые вы ссылаетесь (например, перелистывая страницы), ваши дальнейшие изменения не будут сохранены ...

Так что это заставило меня пересмотреть свое мнение, и теперь я просто рисую свое выделение поверх объекта Graphics, нарисованного PageRenderer Джаспера.
Гораздо проще и чище. Только подсветка фона не будет работать таким образом.

...