Jasper-Bericht - Anzeigen und Drucken von Berichten

Die Ausgabe des Berichtsfüllprozesses JasperPrint-Objekte können mithilfe einer integrierten Viewer-Komponente angezeigt oder gedruckt oder in gängigere Dokumentformate wie PDF, HTML, RTF, XLS, ODT, CSV oder XML exportiert werden. Das Anzeigen und Drucken der Jasper-Dokumente wird in diesem Kapitel erläutert, und das Exportieren wird im nächsten Kapitel, dh "Exportberichte" , erläutert .

Anzeigen von Berichten

JasperReport bietet einen integrierten Viewer zum Anzeigen der generierten Berichte im Originalformat. Es ist eine Swing-basierte Komponente, und andere Java-Anwendungen können diese Komponente integrieren, ohne die Dokumente in andere Formate exportieren zu müssen, um angezeigt oder gedruckt zu werden. Die Klasse net.sf.jasperreports.view.JRViewer repräsentiert diese visuelle Komponente. Diese Klasse kann auch durch Unterklassifizieren an die Anwendungsanforderungen angepasst werden.

JasperReports verfügt auch über eine Swing-Anwendung, die die visuelle Komponente zum Anzeigen der Berichte verwendet. Diese Anwendung hilft beim Anzeigen von Berichten im selben Format wie * .jrprint erstellt wird. Diese Swing-Anwendung ist in der Klasse net.sf.jasperreports.view.JasperViewer implementiert . Um Berichte mit dieser Klasse anzuzeigen, müssen wir sie in ein ANT-Ziel einschließen.

Anzeigen des generierten Berichts

Das folgende Beispiel zeigt, wie ein Bericht mit der JasperViewer-Klasse angezeigt wird.

Lassen Sie uns eine Berichtsvorlage schreiben. Der Inhalt der JRXML-Datei (C: \ tools \ jasperreports-5.0.1 \ test \ jasper_report_template.jrxml) ist wie folgt:

<?xml version = "1.0" encoding = "UTF-8"?>
<!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" language = "groovy" pageWidth = "595"
   pageHeight = "842" columnWidth = "555" leftMargin = "20" rightMargin = "20"
   topMargin = "20" bottomMargin = "20">

   <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>
   
   <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 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" />
            <textElement textAlignment = "Center" verticalAlignment = "Middle" />
            
            <textFieldExpression class = "java.lang.String">
               <![CDATA[$F{name}]]>
            </textFieldExpression>
         </textField>
      
      </band>
   </detail>
	
</jasperReport>

Als Nächstes übergeben wir eine Sammlung von Java-Datenobjekten (Java-Beans) an die JasperReports Engine, um diesen kompilierten Bericht zu füllen.

Schreiben Sie eine POJO DataBean.java, die das Datenobjekt (Java Bean) darstellt. Diese Klasse definiert zwei String-Objekte, nämlich 'Name' und 'Land'. Speichern Sie es im VerzeichnisC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint.

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;
   }
}

Schreiben Sie eine Klasse DataBeanList.java, die über eine Geschäftslogik verfügt, um eine Sammlung von Java-Bean-Objekten zu generieren. Dies wird weiter an die JasperReports-Engine übergeben, um den Bericht zu generieren. Hier fügen wir der Liste 4 DataBean-Objekte hinzu. Speichern Sie es im VerzeichnisC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint.

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;
   }
}

Schreiben Sie eine Hauptklassendatei JasperReportFill.java, der die Java-Bean-Sammlung aus der Klasse (DataBeanList) abruft und an die JasperReports-Engine übergibt, um die Berichtsvorlage zu füllen. Speichern Sie es im VerzeichnisC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint.

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();
      try {
         JasperFillManager.fillReportToFile( 
            sourceFileName, parameters, beanColDataSource);
      } catch (JRException e) {
         e.printStackTrace();
      }
   }
}

Schreiben wir ein Ziel viewFillReportin die Datei build.xml. Die Datei build.xml lautet wie folgt:

Die Importdatei - baseBuild.xml wird aus dem Kapitel Umgebungs-Setup ausgewählt 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 aus ant -Dmain-class=com.tutorialspoint.JasperReportFill(viewFillReport ist das Standardziel). Als Ergebnis sehen wir ein JasperViewer-Fenster, wie im folgenden Bildschirm gezeigt -

Berichte drucken

Wir können die von der JasperReports-Bibliothek generierten Dokumente (in ihrem proprietären Format, dh JasperPrint- Objekten) mit der Klasse net.sf.jasperreports.engine.JasperPrintManager drucken . Dies ist eine Fassadenklasse, die auf der Java 2 Printing API basiert. Wir können die Dokumente auch drucken, sobald die JasperReport-Dokumente in andere Formate wie HTML oder PDF exportiert wurden.

Drucken des generierten Berichts

Der folgende Code veranschaulicht das Drucken eines Berichts. Lassen Sie uns unsere vorhandene Klasse JasperReportFill aktualisieren. Wir werden die JasperPrintManager.printReport () -Methode verwenden. Diese Methode verwendet den Namen der Quelldatei (hier übergeben wir die .jrprint- Datei, die wir im vorherigen Schritt mit der Methode JasperFillManager.fillReportToFile () generiert haben) als ersten Parameter. Der zweite Parameter ist der Boolesche Wert für die Anzeige des Standarddruckdialogs (wir haben ihn festgelegt)true Hier).

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.JasperPrintManager;
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";
      String printFileName = null;
      DataBeanList DataBeanList = new DataBeanList();
      ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();

      JRBeanCollectionDataSource beanColDataSource = new 
         JRBeanCollectionDataSource(dataList);

      Map parameters = new HashMap();
      try {
    	   printFileName = JasperFillManager.fillReportToFile( 
            sourceFileName, parameters, beanColDataSource);
         if(printFileName != null){
            JasperPrintManager.printReport( printFileName, true);
         }
      } catch (JRException e) {
         e.printStackTrace();
      }
   }
}

Speichern wir diese Datei nun im Verzeichnis C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint. Wir werden diese Datei mit ANT kompilieren und ausführen. Der Inhalt von build.xml ist wie folgt:

<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "executereport" basedir = ".">
   <import file = "baseBuild.xml"/>

   <target name = "executereport" depends = "compile,compilereportdesing,run">
      <echo message = "Im here"/>
   </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 die Eingabeaufforderung und wechseln Sie in das Verzeichnis, in dem build.xml abgelegt ist. Führen Sie abschließend den Befehl ausant -Dmain-class=com.tutorialspoint.JasperReportPrint. Als Ergebnis wird ein Druckdialogfeld angezeigt. Klicken Sie auf OK, um das Dokument zu drucken.