2009-10-19 10 views
1

J'ajoute l'internationalisation dans une application Web Tapestry qui utilise les rapports Jasper pour générer des rapports tabulaires normaux, ainsi que des graphiques et des graphiques via JFreeChart. En utilisant le paramètre REPORT_LOCALE de Jasper, je peux définir les rapports régionaux pour Jasper et cela fonctionne parfaitement pour les rapports tabulaires, mais cela ne fonctionne pas pour les rapports JFreeChart.Transférer les détails des paramètres régionaux via Jasper - Rapports à JFreechart

Les étiquettes de graduation de l'Axe apparaissent dans les paramètres régionaux par défaut, de sorte que si je fais une série temporelle, les noms des mois sortent dans la mauvaise langue. La seule façon dont j'ai compris comment gérer cela est de changer les paramètres régionaux par défaut de la JVM dont je ne suis pas content.

Est-ce que quelqu'un sait s'il existe un moyen de configurer JFreeChart pour utiliser un environnement local particulier de sorte que lorsque Jasper l'appelle, il utilise cet environnement local?

+0

Jasper ne passe-t-il pas? – jitter

+0

Non. J'ai regardé le code source et Jasper propage soigneusement le paramètre-Map qui inclut le Locale dans le code de rapport mais pas dans le code de représentation graphique. –

Répondre

1

Je viens juste de me lancer dans ce problème, et j'ai réussi à le contourner en créant une classe Chart Customizer.

Dans mon .jrxml:

<chart evaluationTime="Report" customizerClass="foo.Customizer" renderType="image"> 

classe Mon Customizer ressemble alors à ceci:

package foo; 

import java.text.NumberFormat; 
import java.util.Locale; 

import net.sf.jasperreports.engine.JRAbstractChartCustomizer; 
import net.sf.jasperreports.engine.JRChart; 
import net.sf.jasperreports.engine.JRParameter; 

import org.jfree.chart.JFreeChart; 
import org.jfree.chart.axis.NumberAxis; 
import org.jfree.chart.plot.CategoryPlot; 

public class Customizer extends JRAbstractChartCustomizer { 

    public void customize(JFreeChart chart, JRChart jasperChart) { 
     CategoryPlot plot = (CategoryPlot) chart.getPlot(); 
     NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); 
     rangeAxis.setNumberFormatOverride(
      NumberFormat.getInstance((Locale) 
      getParameterValue(JRParameter.REPORT_LOCALE))); 
    } 

} 

Ouais, ce code fait beaucoup d'hypothèses. Mais j'ai toujours explicitement défini les paramètres régionaux avant d'exécuter un rapport, donc je sais que ce n'est pas nul. Et je sais que mon graphique particulier a un CategoryPlot et un NumberAxis, donc je ne fais pas les instancesof checks. Mais vous avez l'idée. Je rappelle la plupart des méthodes de JFreeChart ayant un paramètre de locale.

Charles

+0

Merci, je vais essayer la prochaine fois que je travaille sur le code de la carte et poster une mise à jour sur la façon dont ça se passe –

+0

Je viens de réaliser que je n'ai pas vraiment répondu à votre question formaté avec les décimales correctes et les séparateurs de milliers selon les paramètres régionaux, alors que vous voulez que les noms des mois soient localisés. Mais je pense que vous pouvez appliquer le même concept - vous avez probablement un DateAxis au lieu d'un NumberAxis, et vous devriez être capable d'appeler DateAxis.setDateFormatOverride(). Mon customizer fonctionne vraiment pour ce que je fais; ce que je suggère dans ce commentaire n'est pas testé mais devrait fonctionner. –