Abschnitte melden

Die Struktur einer einfachen Berichtsvorlage haben wir im Kapitel Erste Schritte erläutert . In ähnlicher Weise strukturiert JasperReports die Berichtsvorlage in mehrere Abschnitte. Abschnitte sind Teile des Berichts, die eine bestimmte Höhe haben und Berichtsobjekte wie Linien, Rechtecke, Bilder oder Textfelder enthalten können.

Die Berichts-Engine durchläuft zum Zeitpunkt des Berichtsfüllens die virtuellen Datensätze der bereitgestellten Berichtsdatenquelle. Abhängig vom definierten Verhalten jedes Abschnitts rendert die Engine dann gegebenenfalls jeden Berichtsabschnitt. Beispielsweise wird der Detailabschnitt für jeden Datensatz in der Datenquelle gerendert. Wenn Seitenumbrüche auftreten, werden die Seitenkopf- und Seitenfußabschnitte nach Bedarf gerendert.

In JasperReports werden Terminologie- und Berichtsabschnitte auch als bezeichnet report bands. Abschnitte bestehen aus einer oder mehreren Bands. Diese Abschnitte werden zur Zeit der Berichterstellung wiederholt ausgefüllt und bereiten das endgültige Dokument vor.

Hauptabschnitte

Eine Berichtsvorlage in JasperReports enthält die folgenden Hauptabschnitte:

<title></title>

<pageheader></pageheader>

<columnheader></columnheader>

<groupheader></groupheader>

<detail></detail>

<groupfooter></groupfooter>

<columnfooter></columnfooter>

<pagefooter></pagefooter>

<lastpagefooter></lastpagefooter>

<summary></summary>

<nodata></nodata>

<background></background>

Die folgende Tabelle fasst die einzelnen Abschnitte zusammen -

S.NO. Abschnitt und Beschreibung
1

Title

Dieser Abschnitt wird nur einmal am Anfang des Berichts angezeigt.

2

Page Header

Dieser Abschnitt wird am Anfang jeder Seite im generierten Dokument angezeigt.

3

Column Header

Dieser Abschnitt wird am Anfang jeder Spalte im generierten Dokument angezeigt. Wenn für den Bericht nur eine Spalte definiert ist, werden die Spaltenüberschriften und Fußzeilen ignoriert.

4

Group Header

Dieser Abschnitt wird von einer Berichtsgruppe (Kapitel Gruppen ) eingeleitet . Jedes Mal, wenn der Gruppierungsausdruck seinen Wert ändert, wird der Gruppenkopfabschnitt über dem Detailabschnitt gedruckt. Wenn mehr als eine Gruppe definiert ist, wird der Gruppenkopf in der Reihenfolge der Gruppendefinition gedruckt.

5

Detail

Dieser Abschnitt wird für jede Datenzeile wiederholt, die von der Datenquelle des Berichts bereitgestellt wird. Der Detailabschnitt kann aus mehreren Bändern bestehen.

6

Group Footer

Dieser Abschnitt wird von einer Berichtsgruppe (Kapitel Gruppen ) eingeleitet . Der Gruppenfußbereich wird unter dem Detailabschnitt gedruckt, bevor sich der Wert des Gruppierungsausdrucks ändert. Die Gruppenfußzeile wird immer für die letzte Datenzeile in der Datenquelle gedruckt. Wenn mehr als eine Gruppe definiert ist, wird die Gruppenfußzeile in umgekehrter Reihenfolge der Gruppendefinition gedruckt.

7

Column Footer

Dieser Abschnitt wird am Ende jeder Spalte angezeigt. Wenn die Spaltenanzahl des Berichts 1 beträgt, werden die Spaltenkopf- und Fußzeilenabschnitte ignoriert.

8

Page Footer

Dieser Abschnitt wird am Ende jeder Seite angezeigt.

9

Last Page Footer

Dieser Abschnitt ersetzt die normale Seitenfußzeile auf der letzten Seite des Berichts. Falls auch der Zusammenfassungsabschnitt vorhanden ist, ist dies möglicherweise nicht die allerletzte Seite des Dokuments. Dieser Abschnitt ist manchmal nützlich, wenn zusammenfassende Informationen am Ende der letzten Seite angezeigt werden müssen.

10

Summary

Dieser Abschnitt wird am Ende des Berichts nur einmal angezeigt.

11

No Data

In diesem Abschnitt wird gedruckt, wenn die , wenn keine Daten drucken Bericht Eigenschaft gesetzt Keine Daten Abschnitt. Wenn der Abschnitt <noData> in der Berichtsvorlage definiert ist und die Datenquelle leer ist, wird zum Zeitpunkt des Füllens nur der Abschnitt <noData> berücksichtigt, und sein Inhalt erzeugt die Berichtsausgabe.

12

Background

Der Hintergrundabschnitt wird auf jeder Seite angezeigt und kann nicht zur nächsten Seite überlaufen. In diesem Abschnitt platzierte Elemente werden zur Zeit der Seiteninitialisierung ausgewertet und im Hintergrund angezeigt. Alle anderen Seitenobjekte werden über den Hintergrundobjekten angezeigt. Dieser Abschnitt ist nützlich zum Erstellen von Seitenwasserzeichen.

Abschnitt, Elemente und Attributbeziehung

Das folgende Diagramm zeigt die Beziehung zwischen Elementen und Attributen in einem Abschnitt eines Berichts.

Abschnittselemente

Alle oben genannten Berichtsabschnitte sind optional. Jede Berichtsvorlage enthält jedoch mindestens einen solchen Abschnitt. Jeder dieser Abschnitte enthält ein einzelnes <band> Element als einziges Unterelement. A <band> kann null oder mehr folgende Unterelemente enthalten -

<line>, <rechteck>, <ellipse>, <image>, <staticText>, <textField>, <subReport> oder <elementGroup>

Jedes dieser Elemente muss ein einzelnes <enthaltenreportElement> als erstes Element (außer elementGroup). A <reportElement> legt fest, wie Daten für dieses bestimmte Element angeordnet werden. Im Gegensatz zu Variablen und Parametern müssen Berichtselemente keinen Namen haben, da Sie normalerweise kein einzelnes Element in einer Berichtsvorlage abrufen müssen.

Die folgende Tabelle fasst die Attribute von <zusammenreportElement> -

Attribut Beschreibung Gültige Werte
x Gibt die x-Koordinate des Bandelements an. Ein ganzzahliger Wert, der die x-Koordinate des Elements in Pixel angibt. Dieses Attribut ist erforderlich.
y Gibt die y-Koordinate des Bandelements an. Ein ganzzahliger Wert, der die y-Koordinate des Elements in Pixel angibt. Dieses Attribut ist erforderlich.
Breite Gibt die Breite des Bandelements an. Ein ganzzahliger Wert, der die Elementbreite in Pixel angibt. Dieses Attribut ist erforderlich.
Höhe Gibt die Höhe des Bandelements an. Ein ganzzahliger Wert, der die Elementhöhe in Pixel angibt. Dieses Attribut ist erforderlich.
Schlüssel Eindeutige Kennung des Bandelements. Ein eindeutiger Zeichenfolgenwert.
Strecken-Typ Gibt an, wie sich das Element dehnt, wenn sich das enthaltende Band dehnt

NoStretch (default) - Das Element wird nicht gedehnt.

RelativeToTallestObject - Das Element wird gedehnt, um das höchste Objekt in seiner Gruppe aufzunehmen.

RelativeToBand - Das Element wird gedehnt, um der Höhe des Bandes zu entsprechen.

positionType Gibt die Position des Elements an, wenn sich das Band erstreckt.

Float - Das Element bewegt sich abhängig von der Größe der umgebenden Elemente.

FixRelativeToTop (default) - Das Element behält eine feste Position relativ zur Oberseite des Bandes bei.

FixRelativeToBottom - Das Element behält eine feste Position relativ zum Boden des Bandes bei.

isPrintRepeatedValues Gibt an, ob wiederholte Werte gedruckt werden.

true (default) - Wiederholte Werte werden gedruckt.

false - Wiederholte Werte werden nicht gedruckt.

Modus Gibt den Hintergrundmodus des Elements an Undurchsichtig, transparent
isRemoveLineWhenBlank Gibt an, ob das Element entfernt werden soll, wenn es leer ist und sich keine anderen Elemente im selben horizontalen Bereich befinden. wahr falsch
isPrintInFirstWholeBand Gibt an, ob das Element in einem ganzen Band gedruckt werden muss, dh in einem Band, das nicht zwischen Berichtsseiten oder Spalten aufgeteilt ist. wahr falsch
isPrintWhenDetailOverFlows Gibt an, ob das Element gedruckt wird, wenn das Band zu einer neuen Seite oder Spalte überläuft. wahr falsch
printWhenGroupChanges Gibt an, dass das Element gedruckt wird, wenn sich die angegebene Gruppe ändert. Ein Zeichenfolgenwert.
Vordergrundfarbe Gibt die Vordergrundfarbe des Elements an. Entweder ein hexadezimaler RGB-Wert, dem das Zeichen # vorangestellt ist, oder einer der folgenden vordefinierten Werte: Schwarz, Blau, Cyan, Dunkelgrau, Grau, Grün, Hellgrau, Magenta, Orange, Rosa, Rot, Gelb, Weiß.
Hintergrundfarbe Gibt die Hintergrundfarbe des Elements an. Entspricht den gültigen Werten für die Vorfarbe

Abschnittsattribute

Im Folgenden sind die Attribute eines Berichtsabschnitts aufgeführt:

Höhe

Die Höhe des Abschnitts gibt die Höhe in Pixel für diesen bestimmten Abschnitt an und ist für das gesamte Berichtsdesign sehr wichtig.

Beim Ausdruck drucken

Ein boolescher Ausdruck, der bestimmt, ob der Abschnitt gedruckt werden soll oder nicht.

Teilen erlaubt

Ein Flag, das angibt, ob der Abschnitt geteilt werden darf, wenn er nicht auf die aktuelle Seite passt. Wenn true, wird der Abschnitt auf die nächste Seite übertragen. Beachten Sie, dass der Abschnitt unabhängig vom Wert des Flags aufgeteilt wird, falls der Abschnitt nicht auf die nächste Seite passt. splitType kann folgende Werte annehmen:

  • splitType = "Stretch:" Teilt gestreckten Inhalt. Wenn sich der Abschnitt auf der aktuellen Seite erstreckt (wenn der verfügbare Platz kleiner als die angegebene Höhe ist), kann der Bereich, der zur ursprünglichen Höhe hinzugefügt wird, auf die nächste Seite aufgeteilt werden.

  • splitType = "Verhindern:" Verhindern Sie die Aufteilung beim ersten Versuch. Wenn der Abschnitt nicht auf die nächste Seite passt, erfolgt die Aufteilung normal, da die Verhinderung der Bandaufteilung nur beim ersten Aufteilungsversuch wirksam ist.

  • splitType = "Sofort:" Sofort teilen . Die Band darf sich überall teilen, außer oben, ihrem obersten Element.

Beispiel

Um jeden Abschnitt zu demonstrieren, schreiben wir eine Berichtsvorlage (jasper_report_template.jrxml). Speichern Sie diese Datei unterC:\tools\jasperreports-5.0.1\testVerzeichnis. In dieser Datei wird in jedem der Abschnitte ein Text angezeigt (siehe oben). Der Inhalt der Datei ist wie folgt:

<?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 = "jasper_report_template" pageWidth = "300" pageHeight = "300" 
   columnWidth = "300" leftMargin = "0" rightMargin = "0" 
   topMargin = "0" bottomMargin = "0" >

   <title>
      <band height = "50">
         
         <textField>
            <reportElement x = "100" y = "16" width = "100" height = "20"/>
            <textElement/>
            
            <textFieldExpression>
               <![CDATA["Title"]]>
            </textFieldExpression>
        
         </textField>
      
      </band>
   </title>
   
   <pageHeader>
      <band height = "40">
         
         <textField>
            <reportElement  mode = "Opaque" x = "100" y = "10" 
               width = "90" height = "20"/>
            
            <textElement>
               <font isBold = "true"/>
            </textElement>
            
            <textFieldExpression>
               <![CDATA["Page Header"]]>
            </textFieldExpression>
         </textField>
      
      </band>
   </pageHeader>
   
   <columnHeader>
      <band height = "40">
            
         <textField>
            <reportElement  x = "100" y = "10" width = "90" height = "20"/>
            
            <textElement>
               <font isItalic = "true"/>
            </textElement>
            
            <textFieldExpression>
               <![CDATA["Column Header"]]>
            </textFieldExpression>
         </textField>
      
      </band>
   </columnHeader>
   
   <detail>
      <band height ="40">
         
         <textField>
            <reportElement mode = "Opaque" x = "100" y = "10" 
               width = "90" height = "20" backcolor = "#99CCFF"/>
            <textElement/>
            
            <textFieldExpression>
               <![CDATA["Report Details"]]>
            </textFieldExpression>
         </textField>
      
      </band>
   </detail>
   
   <columnFooter>
      <band height = "40">
         
         <textField>
            <reportElement  x = "100" y = "10" width = "90" height = "20"/>
            <textElement/>
            
            <textFieldExpression>
               <![CDATA["Column Footer"]]>
            </textFieldExpression>
         </textField>
      
      </band>
   </columnFooter>
   
   <pageFooter>
      <band height = "40">
         
         <textField>
            <reportElement  x = "100" y = "10" width = "90" height = "20"/>
            <textElement/>
            
            <textFieldExpression>
               <![CDATA["Page Footer"]]>
            </textFieldExpression>
         </textField>
      
      </band>
   </pageFooter>
   
   <lastPageFooter>
      <band height = "40">
         
         <textField>
            <reportElement  x = "100" y = "10" width = "90" height = "20"/>
            <textElement/>
            
            <textFieldExpression>
               <![CDATA["Last Page Footer"]]>
            </textFieldExpression>
         </textField>
      
      </band>
   </lastPageFooter>
   
   <summary>
      <band height = "40">
         
         <textField>
            <reportElement  x = "100" y = "10" width = "90" height = "20"/>
            <textElement/>
            
            <textFieldExpression>
               <![CDATA["Summary"]]>
            </textFieldExpression>
         </textField>
      
      </band>
   </summary>
	
</jasperReport>

Der Java-Code zum Ausfüllen und Generieren des Berichts ist unten angegeben. Speichern wir diese DateiJasperReportFill.java in das Verzeichnis C: \ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspoint.

package com.tutorialspoint;

import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;

public class JasperReportFill {
   public static void main(String[] args) {
      String sourceFileName = "C://tools/jasperreports-5.0.1/test/" + 
         "jasper_report_template.jasper";

      try {
         JasperFillManager.fillReportToFile(sourceFileName, null,
            new JREmptyDataSource());
      } catch (JRException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }

   }
}

Hier verwenden wir eine Instanz von JREmptyDataSource beim Füllen von Berichten, um eine Datenquelle mit einem Datensatz zu simulieren, wobei jedoch alle Felder in diesem einzelnen Datensatz null sind.

Berichterstellung

Wir werden die obige Datei mit unserem regulären ANT-Erstellungsprozess kompilieren und ausführen. Der Inhalt der Datei build.xml (gespeichert im Verzeichnis C: \ tools \ jasperreports-5.0.1 \ test) ist wie folgt.

Die Importdatei - baseBuild.xml wird aus dem Kapitel Umgebungs-Setup übernommen und sollte im selben Verzeichnis wie die build.xml abgelegt werden.

<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewFillReport" basedir = ".">
   
   <import file = "baseBuild.xml" />
   <target name = "viewFillReport" depends = "compile,compilereportdesing,run"
      description = "Launches the report viewer to preview 
      the report stored in the .JRprint file.">
      
      <java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true">
         <arg value = "-F${file.name}.JRprint" />
         <classpath refid = "classpath" />
      </java>
		
   </target>
   
   <target name = "compilereportdesing" description = "Compiles the JXML file and
      produces the .jasper file.">
      
      <taskdef name = "jrc"
         classname = "net.sf.jasperreports.ant.JRAntCompileTask">
         <classpath refid = "classpath" />
      </taskdef>
      
      <jrc destdir = ".">
         <src>
            <fileset dir = ".">
               <include name = "*.jrxml" />
            </fileset>
         </src>
         <classpath refid = "classpath" />
      </jrc>
   
   </target>
	
</project>

Öffnen Sie als Nächstes das Befehlszeilenfenster und wechseln Sie in das Verzeichnis, in dem build.xml abgelegt ist. Führen Sie abschließend den Befehl ausant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReport ist das Standardziel) wie folgt:

C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml

clean-sample:
   [delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
   [delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
   [delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrprint

compile:
   [mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
   [javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28:
   warning: 'includeantruntime' was not set, defau
   [javac] Compiling 1 source file to C:\tools\jasperreports-5.0.1\test\classes

compilereportdesing:
   [jrc] Compiling 1 report design files.
   [jrc] log4j:WARN No appenders could be found for logger
   (net.sf.jasperreports.engine.xml.JRXmlDigesterFac
   [jrc] log4j:WARN Please initialize the log4j system properly.
   [jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
   [jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.

run:
   [echo] Runnin class : com.tutorialspoint.JasperReportFill
   [java] log4j:WARN No appenders could be found for logger
   (net.sf.jasperreports.extensions.ExtensionsEnviro
   [java] log4j:WARN Please initialize the log4j system properly.

viewFillReport:
   [java] log4j:WARN No appenders could be found for logger
   (net.sf.jasperreports.extensions.ExtensionsEnviro
   [java] log4j:WARN Please initialize the log4j system properly.

BUILD SUCCESSFUL
Total time: 18 minutes 22 seconds

Als Ergebnis der obigen Kompilierung wird ein JasperViewer-Fenster wie im folgenden Bildschirm geöffnet -

Hier können wir in jedem der Abschnitte sehen, dass ein Text gedruckt wird. Da JRXML ein <lastPageFooter> -Element enthält, wird es auf der letzten Seite des Berichts anstelle des angezeigten <pageFooter> -Elements angezeigt. Die Elemente <columnHeader> und <columnFooter> werden im Bericht nur angezeigt, wenn er mehr als eine Spalte enthält.