2009-04-09 7 views
1

Je souhaite mettre en évidence certaines parties des rapports que je génère pour l'affichage.
Je ne souhaite pas modifier la définition du rapport. Je veux mettre en évidence la sortie à l'exécution.Mettez en surbrillance du texte dans une visionneuse de rapports Jasper

Mais le JRViewer que j'utilise n'a pas vraiment beaucoup d'API.
La manipulation de l'objet JasperPrint avec setForecolor/setBackcolor avant de l'afficher ne semblait pas modifier la sortie.

Des idées? Ou dois-je surcharger/réimplémenter le spectateur? Ça ne poserait pas beaucoup de problème puisque c'est open source, mais je voudrais éviter de réinventer la roue.

Répondre

0

On dirait que je dois répondre à mes questions moi-même ... encore une fois.

Je surchargées la classe JRViewer (en fait copié le code de JRViewer parce qu'aucun des panneaux intéressants étaient accessibles) et a ajouté quelques méthodes mettant en évidence pour effectuer les opérations suivantes:

Modèle de données de JasperPrint basé utilise - comme son nom l'indique - modèles Ce qui signifie que les objets de texte n'ont pas de style propre, ils utilisent le style de leur modèle.
C'est la raison pour laquelle setForecolor n'a rien fait - l'implémentation JRTemplatePrintElement est vide. Mais si je devais définir la surbrillance sur le modèle de texte je finirais avec une colonne complète de textes en surbrillance, puisqu'ils partagent l'instance du modèle.
Au lieu de cela, je crée un nouveau modèle comme une copie de l'original avec surlignage et l'utiliser dans les éléments d'impression en surbrillance. Btw, ces éléments jasper pourraient vraiment utiliser une méthode clone().
Se sent comme un hack, mais je ne vois pas de meilleure façon.

MISE À JOUR:
Toutefois, cela a un effet secondaire désagréable pour les rapports (virtualisés) basés sur des fichiers. Ils enregistrent apparemment les modifications que vous apportez aux éléments pendant que vous parcourez les pages. Si toutefois le spectateur entre-temps fait en sorte que le virtualiseur rejette les éléments que vous référencez (par exemple en retournant des pages), vos autres changements ne seront pas sauvegardés ...

Alors cela m'a fait reconsidérer et maintenant je suis Je dessine juste ma surbrillance sur l'objet Graphics peint par PageRenderer de Jasper.
Beaucoup plus simple et plus propre. Seule la mise en évidence de l'arrière-plan ne fonctionnera pas de cette façon.

Questions connexes