Berichtsstile

JasperReports verfügt über eine Funktion <Stil>, mit der die Texteigenschaften in einer Berichtsvorlage gesteuert werden können. Dieses Element ist eine Sammlung von Stileinstellungen, die auf Berichtsebene deklariert wurden. Eigenschaften wie Vordergrundfarbe, Hintergrundfarbe, ob die Schrift fett, kursiv oder normal ist, die Schriftgröße, ein Rand für die Schrift und viele andere Attribute werden vom <style> -Element gesteuert. Stile können andere Stile erweitern und Eigenschaften des übergeordneten Stils hinzufügen oder auch überschreiben.

Stileigenschaften

Ein <style> -Element hat viele Attribute. Einige der am häufigsten verwendeten sind in der folgenden Tabelle aufgeführt -

S.NO. Attribut und Beschreibung
1

name

Ist obligatorisch. Es muss eindeutig sein, da es im gesamten Bericht auf den entsprechenden Berichtsstil verweist.

2

isDefault

Gibt an, ob dieser Stil der Standardstil des Dokuments ist.

3

style

Ist ein Verweis auf den übergeordneten Stil.

4

mode

Gibt die Transparenz des Elements an. Mögliche Werte sind Opak und Transparent .

5

forecolor

Ist die Vordergrundfarbe des Objekts.

6

backcolor

Ist die Hintergrundfarbe des Objekts.

7

fill

Bestimmt das Füllmuster, mit dem das Objekt gefüllt wird. Im Moment ist der zulässige Einzelwert Solid .

6

radius

Gibt den Radius des Eckbogens des Rechtecks ​​an.

7

scaleImage

Gibt den Maßstab nur für die Bilder an. Mögliche Werte: Clip, FillFrame, RetainShape, RealHeight und RealSize .

8

hAlign

Gibt die horizontale Ausrichtung an. Mögliche Werte: Links, Mitte, Rechts und Ausgerichtet .

9

vAlign

Gibt die vertikale Ausrichtung an. Mögliche Werte: Oben, Mittel und Unten .

10

rotation

Gibt die Drehung des Elements an. Mögliche Werte: Keine, Links, Rechts und UpsideDown .

11

lineSpacing

Gibt den Zeilenabstand zwischen Textzeilen an. Mögliche Werte: Single, 1_1_2, Double .

12

markup

Gibt den Markup-Stil für gestaltete Texte an.

13

fontName

Gibt den Schriftnamen an.

14

fontSize

Gibt die Schriftgröße an.

15

isBold

Gibt an, ob der Schriftstil fett ist.

16

isItalic

Gibt an, ob der Schriftstil kursiv ist.

17

isUnderline

Gibt an, ob der Schriftstil unterstrichen ist.

18

isStrikeThrough

Gibt an, ob der Schriftstil durchgestrichen ist.

19

pdfFontName

Gibt den zugehörigen PDF-Schriftnamen an.

20

pdfEncoding

Gibt die Zeichenkodierung für das PDF-Ausgabeformat an.

22

isPdfEmbedded

Gibt an, ob die PDF-Schriftart eingebettet ist.

23

pattern

Gibt das Formatmuster für formatierte Texte an.

24

isBlankWhenNull

Gibt an, ob eine leere Zeichenfolge (Leerzeichen) angezeigt werden soll, wenn der Ausdruck null ergibt.

Bedingte Stile

In einigen Situationen sollte ein Stil nur angewendet werden, wenn eine bestimmte Bedingung erfüllt ist (z. B. um benachbarte Zeilenfarben in einem Berichtsdetailabschnitt zu wechseln). Dies kann mit bedingten Stilen erreicht werden.

Ein bedingter Stil besteht aus zwei Elementen:

  • ein boolescher Bedingungsausdruck
  • ein Stil

Der Stil wird nur verwendet, wenn die Bedingung als wahr ausgewertet wird .

Anwenden von Stilen auf Berichtselemente

Jeder Typ von Berichtselement kann mithilfe des Stilattributs auf eine Berichtsstildefinition verweisen. Daher werden alle von der Stildefinition deklarierten Stileigenschaften, die für das aktuelle Element gelten, vererbt. Um die geerbten Werte zu überschreiben, können die auf Berichtselementebene angegebenen Stileigenschaften verwendet werden.

Stilvorlagen

Wir können eine Reihe von Berichten mit einem gemeinsamen Erscheinungsbild erstellen, indem wir den Stil an einem gemeinsamen Ort definieren. Auf diese allgemeine Stilvorlage kann dann von den Berichtsvorlagen verwiesen werden. Eine Stilvorlage ist eine XML-Datei, die eine oder mehrere Stildefinitionen enthält. Stilvorlagendateien, die von der Konvention verwendet werden*.jrtx Verlängerung, aber dies ist nicht obligatorisch.

Eine Stilvorlage enthält folgende Elemente:

  • <jasperTemplate> - Dies ist das Stammelement einer Stilvorlagendatei .

  • <Vorlage> - Dieses Element wird verwendet, um Verweise auf andere Vorlagendateien einzuschließen. Der Inhalt dieses Elements wird als Speicherort der referenzierten Vorlagendatei interpretiert.

  • <Stil> - Dieses Element ist identisch mit dem gleichnamigen Element aus Berichtsentwurfsvorlagen (JRXML-Dateien), mit der Ausnahme, dass ein Stil in einer Stilvorlage keine bedingten Stile enthalten kann. Diese Einschränkung wird durch die Tatsache verursacht, dass bedingte Stile Berichtsausdrücke enthalten und Ausdrücke nur im Kontext einer einzelnen Berichtsdefinition interpretiert werden können.

Verweise auf Stilvorlagen sind in JRXML-Berichten als <template> -Elemente enthalten. Die Stilvorlagen werden zur Berichtsfüllzeit geladen, und Stilnamenreferenzen werden aufgelöst, sobald alle Vorlagen geladen wurden. Beim Laden von Stilvorlagen und Auflösen von Stilnamen in Stile wird ein Baum / Diagramm mit Stilvorlagen erstellt, wobei der obere Rand des Baums die im Bericht definierten Stile darstellt. In diesem Baum werden Stilnamenreferenzen in den letzten Stil aufgelöst, der mit dem Namen in einer Tiefenüberquerung übereinstimmt.

Beispiel

Probieren wir die bedingten Stile und Stilvorlagen aus. Fügen wir das <hinzustyle> Element alternateStylezu unserer vorhandenen Berichtsvorlage (Kapitel Berichtsentwürfe ). Abhängig von der Bedingung ändert sich die Schriftfarbe für eine gleichmäßige Anzahl in Blau. Wir haben auch eine Stilvorlage hinzugefügt"styles.jrtx". Die überarbeitete Berichtsvorlage (jasper_report_template.jrxml) lautet wie folgt. Speichern Sie es im Verzeichnis C: \ tools \ jasperreports-5.0.1 \ test -

<?xml version = "1.0"?>
<!DOCTYPE jasperReport PUBLIC
   "//JasperReports//DTD Report Design//EN"
   "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">

<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 = "595"
   pageHeight = "842" columnWidth = "515"
   leftMargin = "40" rightMargin = "40" topMargin = "50" bottomMargin = "50">
	
   <template>"styles.jrtx"</template>
   
   <style name = "alternateStyle" fontName = "Arial" forecolor = "red">
      <conditionalStyle>
         <conditionExpression>
            <![CDATA[new Boolean($V{countNumber}.intValue() % 2 == 0)]]>
         </conditionExpression>
			
         <style forecolor = "blue" isBold = "true"/>
      </conditionalStyle>
   </style>
   
   <parameter name = "ReportTitle" class = "java.lang.String"/>
   <parameter name = "Author" class = "java.lang.String"/>

   <queryString>
      <![CDATA[]]>
   </queryString>

   <field name = "country" class = "java.lang.String">
      <fieldDescription><![CDATA[country]]></fieldDescription>
   </field>

   <field name = "name" class = "java.lang.String">
      <fieldDescription><![CDATA[name]]></fieldDescription>
   </field>

   <variable name = "countNumber" class = "java.lang.Integer" calculation = "Count">
      <variableExpression><![CDATA[Boolean.TRUE]]></variableExpression>
   </variable>

   <title>
      <band height = "70">
         
         <line>
            <reportElement x = "0" y = "0" width = "515" height = "1"/>
         </line>
         
         <textField isBlankWhenNull = "true" bookmarkLevel = "1">
            <reportElement x = "0" y = "10" width = "515" height = "30"/>
				
            <textElement textAlignment = "Center">
               <font size = "22"/>
            </textElement>
            
            <textFieldExpression class = "java.lang.String">
               <![CDATA[$P{ReportTitle}]]>
            </textFieldExpression>
            
            <anchorNameExpression><![CDATA["Title"]]></anchorNameExpression>
         </textField>

         <textField isBlankWhenNull = "true">
            <reportElement  x = "0" y = "40" width = "515" height = "20"/>
            
            <textElement textAlignment = "Center">
               <font size = "10"/>
            </textElement>
            
            <textFieldExpression class = "java.lang.String">
               <![CDATA[$P{Author}]]>
            </textFieldExpression>
				
         </textField>
      
      </band>
   </title>

   <columnHeader>
      <band height = "23">
         
         <staticText>
            <reportElement mode = "Opaque" x = "0" y = "3" 
               width = "535" height = "15" backcolor = "#70A9A9" />
            
            <box>
               <bottomPen lineWidth = "1.0" lineColor = "#CCCCCC" />
            </box>
				
            <textElement />
				
            <text>
               <![CDATA[]]>
            </text>
				
         </staticText>
         
         <staticText>
            <reportElement x = "414" y = "3" width = "121" height = "15" />
            
            <textElement textAlignment = "Center" verticalAlignment = "Middle">
               <font isBold = "true" />
            </textElement>
				
            <text><![CDATA[Country]]></text>
         </staticText>
         
         <staticText>
            <reportElement x = "0" y = "3" width = "136" height = "15" />
            
            <textElement textAlignment = "Center" verticalAlignment = "Middle">
               <font isBold = "true" />
            </textElement>
				
            <text><![CDATA[Name]]></text>
         </staticText>
      
      </band>
   </columnHeader>

   <detail>
      <band height = "16">
         
         <staticText>
            <reportElement mode = "Opaque" x = "0" y = "0" 
               width = "535" height = "14" backcolor = "#E5ECF9" />
            
            <box>
               <bottomPen lineWidth = "0.25" lineColor = "#CCCCCC" />
            </box>
            
            <textElement />
				
            <text>
               <![CDATA[]]>
            </text>
				
         </staticText>
         
         <textField>
            <reportElement style = "alternateStyle" x = "414" y = "0" 
               width = "121" height = "15" />
            
            <textElement textAlignment = "Center" verticalAlignment = "Middle">
               <font size = "9" />
            </textElement>
            
            <textFieldExpression class = "java.lang.String">
               <![CDATA[$F{country}]]>
            </textFieldExpression>
         </textField>
         
         <textField>
            <reportElement x = "0" y = "0" width = "136" height = "15" 
               style = "Strong"/>
            <textElement textAlignment = "Center" verticalAlignment = "Middle" />
            
            <textFieldExpression class = "java.lang.String">
               <![CDATA[$F{name}]]>
            </textFieldExpression>
         </textField>
      
      </band>
   </detail>

</jasperReport>

Der Inhalt der Stilvorlage styles.jrtxsind wie folgt. Speichern Sie es im Verzeichnis C: \ tools \ jasperreports-5.0.1 \ test.

<?xml version = "1.0"?>

<!DOCTYPE jasperTemplate PUBLIC "-//JasperReports//DTD Template//EN"
  "http://jasperreports.sourceforge.net/dtds/jaspertemplate.dtd">

<jasperTemplate>
   <style name = "Strong" isBold = "true" pdfFontName = "Helvetica-Bold" 
      backcolor = "lightGray forecolor = "green"/>
</jasperTemplate>

Die Java-Codes für das Ausfüllen von Berichten bleiben unverändert. Der Inhalt der DateiC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java sind wie unten angegeben -

package com.tutorialspoint;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

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

      DataBeanList DataBeanList = new DataBeanList();
      ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();

      JRBeanCollectionDataSource beanColDataSource = new 
         JRBeanCollectionDataSource(dataList);

      Map parameters = new HashMap();
      /**
       * Passing ReportTitle and Author as parameters
       */
      parameters.put("ReportTitle", "List of Contacts");
      parameters.put("Author", "Prepared By Manisha");

      try {
         JasperFillManager.fillReportToFile(
         sourceFileName, parameters, beanColDataSource);
      } catch (JRException e) {
         e.printStackTrace();
      }
   }
}

Der Inhalt der POJO-Datei C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java sind wie unten -

package com.tutorialspoint;

public class DataBean {
   private String name;
   private String country;

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }

   public String getCountry() {
      return country;
   }

   public void setCountry(String country) {
      this.country = country;
   }
}

Der Inhalt der Datei C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java sind wie unten -

package com.tutorialspoint;

import java.util.ArrayList;

public class DataBeanList {
   public ArrayList<DataBean> getDataBeanList() {
      ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>();

      dataBeanList.add(produce("Manisha", "India"));
      dataBeanList.add(produce("Dennis Ritchie", "USA"));
      dataBeanList.add(produce("V.Anand", "India"));
      dataBeanList.add(produce("Shrinath", "California"));

      return dataBeanList;
   }

   /**
    * This method returns a DataBean object,
    * with name and country set in it.
    */
   private DataBean produce(String name, String country) {
      DataBean dataBean = new DataBean();
      dataBean.setName(name);
      dataBean.setCountry(country);
      
      return dataBean;
   }
}

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) als -

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, defaulting to build.sysclasspath=last;
   set to false for repeatable builds
   [javac] Compiling 3 source files 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.JRXmlDigesterFactory).
   [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.ExtensionsEnvironment).
   [java] log4j:WARN Please initialize the log4j system properly.

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

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

Hier können wir sehen, dass die Farbe der Schriftart für eine gleichmäßige Anzahl in Blau geändert wird (im Spaltenland). Im Spaltennamen wird die Schriftfarbe in Grün geändert (auf diesen Stil wird in der Stilvorlage verwiesen).