2010-04-08 5 views
6

Ich bewerte JasperReport und iReport, eine Voraussetzung ist die Möglichkeit, einen mehrseitigen Bericht zu erstellen, in dem jede Seite einen anderen Bericht enthält.JasperReports mehrseitiger Bericht mit anderem Inhalt

Beispiel:
Seite 1 enthält eine aktuelle Rechnung für einen Kunden
Page 2 die Rechnungen Liste enthält für den Kunden
Seite 3 enthält eine grafische Darstellung der Höhe der Rechnungen für Jahr
Seite 4 enthält nur festen Text (Sagen Sie Operatoranweisungen ...)

Ist es möglich, einen solchen eindeutigen Bericht zu erstellen, anstatt vier eigenständige Berichte zu erstellen und dann die PDFs zusammenzuführen.

Vielen Dank.

Francesco

Antwort

1

Ja, es ist möglich. Sie können den gesamten Bericht als eine Zusammenstellung von vier separaten Unterberichten erstellen. Dies wird ihre Wiederverwendbarkeit und Trennung von Bedenken ermöglichen.

0

Ja, Sie können sogar Berichte einfügen, die keine Beziehung zum Kunden haben "wenn das Sinn macht".

Auch, um die Dinge noch unterhaltsamer zu machen, können Sie nach Abschluss dieses Berichts, können Sie es in einen anderen übergeordneten Bericht einfügen, dann erhalten Sie den gleichen Bericht für mehrere Kunden.

8

Ich habe etwas anderes versucht.

Ich habe Ireport 4.1.3 verwendet und wenn Sie mit der rechten Maustaste auf Detail1 klicken, können Sie einen weiteren Detailabschnitt hinzufügen.

Fügen Sie eine Schnabel Seite hinzu und es ist fertig.

Hoffe, es hilft :) Grüße

+0

Dies funktioniert nicht für eine variable Anzahl von Detailabschnitten richtig? – CodeMonkey

3

Ja, Sie können durch eine Datenquelle und Parameter Karte für jeden Unterbericht im Hauptbericht erstellen,

Datenquelle enthält die Liste, die als angezeigt wird eine Tabelle im Bericht

Parameter Karte Schlüssel und Werte von Textfeldern in dem Bericht

die gute Nachricht enthält, ist, dass man includ e alle Parameter von allen Seiten in den einzelnen Parameter Karte dann in Bericht jede Seite verarbeitet werden seine Parameter und vergisst andere extrahieren :)

Beispiel:

List<Map<String, Object>> ParamList = new ArrayList<Map<String, Object>>(); 
List<JRDataSource> SourceList = new ArrayList<JRDataSource>(); 

Map<String, Object> params = new HashMap<String, Object>(); 
params.put("Page1_param1", "value1_1"); 
params.put("Page1_param2", "value1_2"); 
params.put("Page1_param3", "value1_3"); 
.. 
params.put("Page2_param1", "value2_1"); 
params.put("Page2_param2", "value2_2"); 
params.put("Page2_param3", "value2_3"); 
.. 
params.put("Page3_param1", "value3_1"); 
params.put("Page3_param2", "value3_2"); 
params.put("Page3_param3", "value3_3"); 
.. 
.. 
List listResult_1 = //select table sql for example 
List listResult_2 = //select table sql for example 
List listResult_3 = //select table sql for example 

JRDataSource dataSource_1 = new ListOfArrayDataSource(
listResult_1, new String[] {"LastName", "FirstName", "address"}); 

JRDataSource dataSource_2 = new ListOfArrayDataSource(
listResult_2, new String[] {"LastName", "FirstName", "address"}); 

JRDataSource dataSource_3 = new ListOfArrayDataSource(
listResult_3, new String[] {"LastName", "FirstName", "address"}); 

// Yes i know ! :D , we put the same params list then as i said befor every sub report will take its own parameters values, so don't worry about this task ;) 
ParamList.add(params); 
ParamList.add(params); 
ParamList.add(params); 

SourceList.add(dataSource_1); 
SourceList.add(dataSource_2); 
SourceList.add(dataSource_3); 

File reportFile = // the jrxml file template of the report 

// We can use also a list of reportFile, so that every page uses his own template :D 


CreateReport(jasperReport, ParamList, SourceList); 

} 

wir jedes Unter Bericht Nun erstellen und hängen Sie ihn an die Hauptbericht:

Public void CreateReport(File reportFile, List<Map<String, Object>> ParamList, List<JRDataSource> SourceList){ 

    JasperReport jasperReport = (JasperReport) JRLoader.loadObject(reportFile.getPath()); 
    Map<String, Object> parameters = paramList.get(0); 
    JRDataSource datasource = datasourceList.get(0); 
    jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, datasource); 

    if(paramList.size()>1){ 
     for(int i=1; i < paramList.size(); i++) 
     { 
      JasperPrint jasperPrint_next = JasperFillManager.fillReport(jasperReport, paramList.get(i), datasourceList.get(i)); 
      List pages = jasperPrint_next.getPages(); 
      for (int j = 0; j < pages.size(); j++) { 
       JRPrintPage object = (JRPrintPage) pages.get(j); 
       jasperPrint.addPage(object); 
      } 
     } 
    } 

} 
Verwandte Themen