2009-11-10 6 views
2

Comment faire pour supprimer dynamiquement la légende d'un graphique à l'aide de l'API de rapport Jasper?Comment faire pour supprimer dynamiquement la légende dans les graphiques à l'aide de rapports Jasper?

J'ai un graphique à afficher de manière dynamique en fonction de certaines configurations, ce qui inclut la légende en tant qu'option. Si la légende n'est pas cochée, je dois masquer ou supprimer la légende du graphique. Y at-il une fonction disponible dans l'API qui peut faire cela?

Répondre

1

Here il existe une méthode setShowLegend(Boolean)

Vous pouvez obtenir le tableau de cette façon (je ne l'ai pas testé, donc il pourrait y avoir quelques problèmes):

 
InputStream is = this.getClaa().getResourceAsStream(jasperFilePath); 
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(is); 
JRChart chart = (JRChart) report.getDetail().getElementByKey("chart"); 
chart.setShowLegend(Boolean.FALSE); 
+0

Merci mais comment puis-je instancier constructeur de JRChart? ceci est mon code pour remplir l'objet jasper: - JasperCompileManager.compileReportToFile (jrxmlPath, jasperpath); \t \t \t \t JasperPrint = JasperFillManager.fillReport (jasperpath, connexion param, \t \t \t \t \t \t); \t \t \t \t JasperExportManager.exportReportToHtmlFile (jasperPrint, htmlFile); comment puis-je créer une instance à partir de cette – stanley

+0

J'ai modifié ma réponse avec les détails. Je suis sûr que cela fonctionnerait, mais essayez-le. – Bozho

+0

je l'ai essayé, mais je suppose que son obsolète: - JasperDesign design = JRXmlLoader.load (jrxmlPath); \t \t \t \t \t JasperReport jasperReport = JasperCompileManager.compileReport (design); JRChart chart = (JRChart) jasperReport.getSummary(). GetElementByKey ("element-1"); chart.setShowLegend (Boolean.FALSE); – stanley

2

Je pense que la description JasperReport La syntaxe (les balises XML composant le fichier jrxml) ne vous laisse pas faire une telle chose.

Voici une description de diagramme circulaire avec la légende (par défaut):

<pieChart> 
    <chart isShowLegend="true"> 
     <reportElement x="19" y="18" width="518" height="196"/> 
     <chartTitle/> 
     <chartSubtitle/> 
     <chartLegend/> 
    </chart> 
    <pieDataset> 
     <keyExpression><![CDATA[$F{name}]]></keyExpression> 
     <valueExpression><![CDATA[$F{value}]]></valueExpression> 
     <labelExpression><![CDATA["<"+$F{name}+">"]]></labelExpression> 
    </pieDataset> 
    <piePlot> 
     <plot/> 
     <itemLabel color="#000000" backgroundColor="#FFFFFF"/> 
    </piePlot> 
</pieChart> 

et ici la même carte sans légende:

<pieChart> 
    <chart isShowLegend="false"> 
     <reportElement x="19" y="18" width="518" height="196"/> 
     <chartTitle/> 
     <chartSubtitle/> 
     <chartLegend/> 
    </chart> 
    <pieDataset> 
     <keyExpression><![CDATA[$F{name}]]></keyExpression> 
     <valueExpression><![CDATA[$F{value}]]></valueExpression> 
     <labelExpression><![CDATA["<"+$F{name}+">"]]></labelExpression> 
    </pieDataset> 
    <piePlot> 
     <plot/> 
     <itemLabel color="#000000" backgroundColor="#FFFFFF"/> 
    </piePlot> 
</pieChart> 

La seule différence est le isShowLegend attribut dans le graphique tag. (Vous pouvez y accéder dans le panneau des propriétés du graphique dans iReport).

Mais cet attribut est une valeur, et vous ne pouvez pas utiliser une expression telle que:

$P{DISPLAY_LEGEND}.booleanValue(); 

DISPLAY_LEGEND serait un paramètre du rapport (type est java.lang.Boolean)


Si vous voulez vraiment réaliser une telle chose, le tour suivant devrait fonctionner:

Définissez votre graphique à l'heure. Un avec légende et un sans. Le graphique devrait se chevaucher. (vous pouvez le faire en face de la balise concernée directement dans le texte XML)

Après cela modifier l'impression lorsque l'expression propriété de chaque graphique, en oder qu'un seul du graphe 2 est imprimé, selon d'une condition. Voici un exemple avec mon paramètre DISPLAY_LEGEND. (Mais il pourrait être une autre condition, importante est également calculé. Que les deux conditions sont symétriques)

<pieChart> 
    <chart isShowLegend="true"> 
     <reportElement x="19" y="18" width="518" height="196"> 
      <printWhenExpression><![CDATA[$P{DISPLAY_LEGEND}]]></printWhenExpression> 
     </reportElement> 
     <!-- end of the chart definition--> 
    </chart> 
    <!-- pieDataset and piePlot--> 
</pieChart> 
<pieChart> 
    <chart isShowLegend="false"> 
     <reportElement x="19" y="18" width="518" height="196"> 
      <printWhenExpression><![CDATA[new Boolean(!$P{DISPLAY_LEGEND}.booleanValue())]]></printWhenExpression> 
     </reportElement> 
     <!-- end of the chart definition--> 
    </chart> 
    <!-- pieDataset and piePlot--> 
</pieChart> 

Je voulais aussi mentionner que vous pouvez accéder au l'objet JFreeChart lors de la génération de rapports.Voici quelques messages du forum, qui m'a aidé à le faire:

+0

Merci beaucoup ... ça marche – stanley

Questions connexes