2016-03-16 2 views

Répondre

0

Le tableau est généré par la bibliothèque et Afik il n'y a aucun paramètre qui vous permettra de réaliser automatiquement.

La solution générerait plusieurs diagrammes (les uns au-dessus des autres) sur chaque série et appliquerait un personnalisateur au diagramme de sorte que chaque graphique puisse être adapté en fonction de sa position.

données csv exemple

+----------+--------+--------+ 
| Category | Serie1 | Serie2 | 
+----------+--------+--------+ 
| A  | 1  | 0.3 | 
| B  | 0.5 | 0.2 | 
| C  | 0.7 | 0.6 | 
+----------+--------+--------+ 

exemple jrxml avec deux tableaux (1 pour série1 et l'autre pour series2)

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="chartTest" pageWidth="595" pageHeight="842" whenNoDataType="BlankPage" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="597c0716-df6b-42ec-a7c8-863eb1b7174a"> 
    <queryString> 
     <![CDATA[]]> 
    </queryString> 
    <field name="Category" class="java.lang.String"/> 
    <field name="Serie1" class="java.lang.Double"/> 
    <field name="Serie2" class="java.lang.Double"/> 
    <summary> 
     <band height="205" splitType="Stretch"> 
      <lineChart> 
       <chart customizerClass="ChartCustomizer"> 
        <reportElement x="171" y="0" width="200" height="100" uuid="245c4678-0cad-4342-8e54-6355c23a3c72"/> 
        <chartTitle/> 
        <chartSubtitle/> 
        <chartLegend position="Right"/> 
       </chart> 
       <categoryDataset> 
        <categorySeries> 
         <seriesExpression><![CDATA["Serie 1"]]></seriesExpression> 
         <categoryExpression><![CDATA[$F{Category}]]></categoryExpression> 
         <valueExpression><![CDATA[$F{Serie1}]]></valueExpression> 
        </categorySeries> 
       </categoryDataset> 
       <linePlot isShowShapes="false"> 
        <plot/> 
        <categoryAxisFormat> 
         <axisFormat verticalTickLabels="false"/> 
        </categoryAxisFormat> 
        <valueAxisFormat> 
         <axisFormat tickLabelColor="#FF0033"/> 
        </valueAxisFormat> 
       </linePlot> 
      </lineChart> 
      <lineChart> 
       <chart> 
        <reportElement x="171" y="93" width="200" height="111" uuid="b53cb5dc-09cd-448d-93ea-0719c239eafe"/> 
        <chartTitle/> 
        <chartSubtitle/> 
        <chartLegend position="Right"/> 
       </chart> 
       <categoryDataset> 
        <categorySeries> 
         <seriesExpression><![CDATA["Serie 2"]]></seriesExpression> 
         <categoryExpression><![CDATA[$F{Category}]]></categoryExpression> 
         <valueExpression><![CDATA[$F{Serie2}]]></valueExpression> 
        </categorySeries> 
       </categoryDataset> 
       <linePlot isShowShapes="false"> 
        <plot> 
         <seriesColor seriesOrder="0" color="#000000"/> 
        </plot> 
        <categoryAxisFormat> 
         <axisFormat verticalTickLabels="true"/> 
        </categoryAxisFormat> 
        <valueAxisFormat> 
         <axisFormat/> 
        </valueAxisFormat> 
        <rangeAxisMinValueExpression><![CDATA[0]]></rangeAxisMinValueExpression> 
        <rangeAxisMaxValueExpression><![CDATA[2]]></rangeAxisMaxValueExpression> 
       </linePlot> 
      </lineChart> 
     </band> 
    </summary> 
</jasperReport> 

classe java y compris le ChartCustomizer pour le graphique 1 et main méthode pour exécuter le rapport

public class ChartCustomizer implements JRChartCustomizer { 

    @Override 
    public void customize(JFreeChart jfchart, JRChart jrchart) { 
     CategoryPlot plot = (CategoryPlot) jfchart.getPlot(); 
     CategoryAxis range = plot.getDomainAxis(); 
     //Don't show the range axis 
     range.setVisible(false); 

     //Lets remove the 0, in your case you can do a customizer to remove the 2 on the other chart 
     NumberAxis rangeAxis = new NumberAxis() { 

      private static final long serialVersionUID = 3744076016723532336L; 

      @SuppressWarnings({ "rawtypes", "unchecked" }) 
      @Override 
      public List refreshTicks(Graphics2D g2, AxisState state, Rectangle2D dataArea, RectangleEdge edge) { 

       List allTicks = super.refreshTicks(g2, state, dataArea, edge); 
       NumberTick t0 = new NumberTick(TickType.MAJOR, 0, "", TextAnchor.CENTER_RIGHT, TextAnchor.CENTER_RIGHT, 0); 
       allTicks.set(0, t0); 
       return allTicks; 
      } 
     }; 

     //Set range and paint, since we replace the rangeAxis 
     rangeAxis.setRange(0, 2); 
     rangeAxis.setTickLabelPaint(Color.RED); 
     plot.setRangeAxis(rangeAxis); 

    } 

    public static void main(String[] args) throws Exception { 
     JasperReport report = JasperCompileManager.compileReport("ChartTest.jrxml"); 

     JRCsvDataSource ds = new JRCsvDataSource(new File("ChartData.csv")); 
     ds.setNumberFormat(NumberFormat.getInstance(Locale.US)); //. as decimal separator 
     ds.setFieldDelimiter(';'); 
     ds.setUseFirstRowAsHeader(true); 

     Map<String, Object> paramMap = new HashMap<String, Object>(); 
     JasperPrint jasperPrint = JasperFillManager.fillReport(report, paramMap, ds); 
     JRPdfExporter exporter = new JRPdfExporter(); 
     exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); 
     exporter.setExporterOutput(new SimpleOutputStreamExporterOutput("ChartTest.pdf")); 
     SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration(); 
     configuration.setCreatingBatchModeBookmarks(true); 
     configuration.setMetadataAuthor("Petter"); 
     exporter.setConfiguration(configuration); 
     exporter.exportReport(); 
    } 
} 

Résultat

Output

Comme vous pouvez le voir pas encore parfait, car la légende vous pouvez le supprimer de la carte et créer directement dans le rapport de jaspe, en outre, vous pouvez supprimer le 2.0 sur le deuxième graphique au lieu du 0 dans le premier graphique, mais la mise en œuvre plus loin, je vais vous laisser.

+0

problème résolu. Je vous remercie . – Sharvari