2009-04-09 10 views
1

Ich möchte einige Teile der Berichte hervorheben, die ich zur Anzeige erzeuge.
Ich möchte die Berichtsdefinition nicht ändern. Ich möchte die Ausgabe zur Laufzeit hervorheben.Markieren Sie einen Text in einem Jasper Reports-Viewer.

Aber der JRViewer, den ich verwende, hat nicht wirklich viel von einer API.
Und die Manipulation des JasperPrint-Objekts mit setForecolor/setBackcolor vor der Anzeige schien die Ausgabe nicht zu ändern.

Irgendwelche Ideen? Oder muss ich den Viewer überladen/neu implementieren? Wäre kein Problem, da es Open Source ist, aber ich möchte das Rad nicht neu erfinden.

Antwort

0

Sieht so aus, als müsste ich meine Fragen selbst beantworten ... schon wieder.

ich die JRViewer Klasse überlastet, und fügte einige hervorheben Methoden (eigentlich den Code JRViewer, weil keines der interessanten Tafeln waren zugänglich kopiert) folgendes zu tun:

Template basierte JasperPrint Daten verwendet - wie der Name schon sagt - Vorlagen. Das bedeutet, dass die Textobjekte keinen eigenen Stil haben, sondern den Stil ihrer Vorlage verwenden.
Das ist der Grund, warum setForecolor nichts getan hat - die Implementierung von JRTemplatePrintElement ist leer.

Aber wenn ich die Hervorhebung auf der Textvorlage einstellen würde, würde ich mit einer vollen Spalte der hervorgehobenen Texte enden, da sie die Vorlageninstanz teilen.
Stattdessen erstelle ich eine neue Vorlage als Kopie des Originals mit Hervorhebung und verwende diese in den hervorgehobenen Druckelementen. Übrigens könnten diese Jaspis-Elemente wirklich eine clone() -Methode verwenden.
Fühlt sich an wie ein Hack, aber ich sehe keinen besseren Weg.

UPDATE:
Allerdings hat dies einen unangenehmen Nebeneffekt für dateibasierte (virtualisierte) Berichte. Diese speichern anscheinend alle Änderungen, die Sie an den Elementen vornehmen, während Sie die Seiten durchlaufen. Wenn der Viewer jedoch in der Zwischenzeit dazu führt, dass der Virtualisierer die referenzierten Elemente verwirft (z. B. durch Blättern), werden Ihre weiteren Änderungen nicht gespeichert ...

Das hat mich dazu gebracht, es zu überdenken und jetzt bin ich zeichne einfach meine Hervorhebung über das von Jaspers PageRenderer gemalte Graphics-Objekt.
Viel einfacher und sauberer. Nur die Hervorhebung des Hintergrunds funktioniert auf diese Weise nicht.