2016-05-24 6 views
1

Bin in Jasper nicht viel erlebt, aber das ist meine zweite Aufgabe und sind mit dieser Frage steckenJasper: List-Objekt mit anderer Objektliste zusammengeführt zu werden, während Berichterstellung

Unten ist meine Java Bean-Klassen Bericht und ReportRecords,

Class Report{ 
    private String field1; 
    private String field2; 
    private String field3; 
    private String field4; 
    List<ReportRecords> reportRecordData = new ArrayList<>(); 

    ....setters getters().... 
} 

Class ReportRecords{ 
    private String column1; 
    private String column2; 
    private String column3; 
    private String column4; 

    ....setters getters().... 
} 

und ich bin Bericht exportieren wie unten,

List<Report> report = getReports(); 

    JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(report); 
    Map<String, Object> parameters = new HashMap<String, Object>(); 
    JasperPrint printFileName = JasperFillManager.fillReport(template, parameters, beanColDataSource); 
    JRTextExporter txtExporter = new JRTextExporter(); 

    txtExporter.setParameter(JRTextExporterParameter.LINE_SEPARATOR, "\r\n"); 
    txtExporter.setParameter(JRTextExporterParameter.PAGE_WIDTH, 110); 
    txtExporter.setParameter(JRTextExporterParameter.PAGE_HEIGHT, 80); 
    txtExporter.setParameter(JRExporterParameter.JASPER_PRINT, printFileName); 
    txtExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "C:/report/report.txt"); 
    txtExporter.setParameter(JRTextExporterParameter.CHARACTER_WIDTH,new Float(7)); 
    txtExporter.setParameter(JRTextExporterParameter.CHARACTER_HEIGHT,new Float(13)); 
    txtExporter.exportReport(); 

und unten ist der Jasper-Code, entfernt i anderes Label bezogenen Code und hinzugefügt ly erforderlichen Code hier,

<subDataset name="serviceCodeData" uuid="6b6aa9cd-83d1-47b6-b475-2988e1a3a804"> 
    <queryString> 
     <![CDATA[]]> 
    </queryString> 
    <field name="column1" class="java.lang.String"/> 
    <field name="column2" class="java.lang.String"/> 
    <field name="column3" class="java.lang.String"/> 
    <field name="column4" class="java.lang.String"/> 
</subDataset> 
<field name="Field1" class="java.lang.String"/> 
<field name="Field2" class="java.lang.String"/> 
<field name="Field3" class="java.lang.String"/> 
<field name="Field4" class="java.lang.String"/> 

<pageHeader> 
    <!-- All Field1 to Field4 labels and values --> 
</pageHeader> 
<columnHeader> 
    <!-- All column1 to column2 labels --> 
</columnHeader> 

    And below is the list for column values 

<detail> 
    <band height="19" splitType="Stretch"> 
     <componentElement> 
      <reportElement x="-19" y="0" width="818" height="19" uuid="d08327de-369c-41b5-818a-2381d0f7def2"/> 
      <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical"> 
       <datasetRun subDataset="reportRecordData" uuid="f39ce5d6-7347-4911-b211-3c60cbd01590"> 
        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{reportRecordData})]]></dataSourceExpression> 
       </datasetRun> 
       <jr:listContents height="19" width="818"> 
        <textField> 
         <reportElement x="39" y="0" width="157" height="18" uuid="03ef5ad6-fafb-4c5d-aa41-a46b1474f9fd"/> 
         <textElement textAlignment="Left"/> 
         <textFieldExpression><![CDATA[$F{column1}]]></textFieldExpression> 
        </textField> 
        <textField> 
         <reportElement x="39" y="0" width="157" height="18" uuid="03ef5ad6-fafb-4c5d-aa41-a46b1474f9fd"/> 
         <textElement textAlignment="Left"/> 
         <textFieldExpression><![CDATA[$F{column2}]]></textFieldExpression> 
        </textField> 
        <textField> 
         <reportElement x="39" y="0" width="157" height="18" uuid="03ef5ad6-fafb-4c5d-aa41-a46b1474f9fd"/> 
         <textElement textAlignment="Left"/> 
         <textFieldExpression><![CDATA[$F{column3}}]]></textFieldExpression> 
        </textField> 
        <textField> 
         <reportElement x="39" y="0" width="157" height="18" uuid="03ef5ad6-fafb-4c5d-aa41-a46b1474f9fd"/> 
         <textElement textAlignment="Left"/> 
         <textFieldExpression><![CDATA[$F{column4}]]></textFieldExpression> 
        </textField> 
       </jr:listContents> 
      </jr:list> 
     </componentElement> 
    </band> 
</detail> 

Und der Bericht soll tobe wie unten erzeugt,

enter image description here

Aber es wie unten erzeugt, dessen Verschmelzung alle Liste ein Berichtsobjekt,

enter image description here

Bitte fragen Sie, wenn weitere Informationen dazu benötigt werden, helfen Sie mir.

+1

Sie können dies [link] (http://stackoverflow.com/questions/12209300/jrbeancollectiondatasource-how-to-show-data-from-the-java-util-list-from-javabe) ansehen . Schau, ob das hilft –

Antwort

1

Die Logik von Jasper Reports besteht darin, zunächst die pageHeader, columnHeader (auf jeder Seite einmal aufgerufen) zu generieren und anschließend das detail-Band auf Ihrer Datenquelle zu iterieren.

Deshalb haben Sie das aktuelle Ergebnis. Die pageHeader, columnHeader wird erstellt, wenn Sie auf Datensatz eins sind, dann wird die Liste im Detailband zweimal auf Ihrer Datenquelle aufgerufen.

Sie sollten Report, Field1,.. Field4in das Detailband verschieben, damit diese auch angezeigt werden, wenn die Datenquelle iteriert wird.

+0

Vielen Dank Petter, es hat funktioniert :) – Sathya

Verwandte Themen