Rapport Jasper - Afficher et imprimer des rapports
La sortie du processus de remplissage de rapport Les objets JasperPrint peuvent être visualisés à l'aide d'un composant de visionneuse intégré, ou imprimés, ou exportés vers des formats de documents plus courants tels que PDF, HTML, RTF, XLS, ODT, CSV ou XML. L'affichage et l'impression des documents Jasper seront abordés dans ce chapitre et l'exportation sera discutée dans le chapitre suivant, à savoir «Exporter des rapports».
Affichage des rapports
JasperReport fournit une visionneuse intégrée pour visualiser les rapports générés dans leur format d'origine. Il s'agit d'un composant basé sur le swing et d'autres applications Java peuvent intégrer ce composant sans avoir à exporter les documents vers d'autres formats afin d'être visualisés ou imprimés. La classe net.sf.jasperreports.view.JRViewer représente ce composant visuel. Cette classe peut également être personnalisée selon les besoins de l'application, en la sous-classant.
JasperReports dispose également d'une application Swing, qui utilise le composant visuel pour visualiser les rapports. Cette application permet d'afficher les rapports dans le même format que celui de * .jrprint. Cette application Swing est implémentée dans la classe net.sf.jasperreports.view.JasperViewer . Pour afficher les rapports utilisant cette classe, nous devons l'envelopper dans une cible ANT.
Affichage du rapport généré
L'exemple suivant montre - comment afficher un rapport à l'aide de la classe JasperViewer -
Écrivons un modèle de rapport. Le contenu du fichier JRXML (C: \ tools \ jasperreports-5.0.1 \ test \ jasper_report_template.jrxml) est comme indiqué ci-dessous -
<?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>
Ensuite, passons une collection d'objets de données Java (Java beans), au moteur JasperReports, pour remplir ce rapport compilé.
Écrivez un POJO DataBean.java, qui représente l'objet de données (bean Java). Cette classe définit deux objets String, à savoir «nom» et «pays». Enregistrez-le dans le répertoireC:\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;
}
}
Ecrivez une classe DataBeanList.java, qui a une logique métier pour générer une collection d'objets bean java. Ceci est ensuite transmis au moteur JasperReports, pour générer le rapport. Ici, nous ajoutons 4 objets DataBean dans la liste. Enregistrez-le dans le répertoireC:\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;
}
}
Ecrire un fichier de classe principal JasperReportFill.java, qui récupère la collection de bean java de la classe (DataBeanList) et la transmet au moteur JasperReports, pour remplir le modèle de rapport. Enregistrez-le dans le répertoireC:\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();
}
}
}
Écrivons une cible viewFillReportdans le fichier build.xml. Le fichier build.xml est le suivant -
Le fichier d'importation - baseBuild.xml est choisi dans le chapitre Configuration de l'environnement et doit être placé dans le même répertoire que build.xml.
<?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>
Ensuite, ouvrons la fenêtre de ligne de commande et allons dans le répertoire où build.xml est placé. Enfin, exécutez la commande ant -Dmain-class=com.tutorialspoint.JasperReportFill(viewFillReport est la cible par défaut). En conséquence, nous voyons une fenêtre JasperViewer comme indiqué dans l'écran ci-dessous -
Impression de rapports
Nous pouvons imprimer les documents générés par la bibliothèque JasperReports (dans leur format propriétaire c'est-à- dire les objets JasperPrint ) en utilisant la classe net.sf.jasperreports.engine.JasperPrintManager . Il s'agit d'une classe de façade qui repose sur l'API d'impression Java 2. Nous pouvons également imprimer les documents une fois que les documents JasperReport sont exportés vers d'autres formats tels que HTML ou PDF.
Impression du rapport généré
Le code suivant illustre l'impression d'un rapport. Mettons à jour notre classe existante JasperReportFill. Nous utiliserons la méthode JasperPrintManager.printReport () . Cette méthode prend le nom du fichier source (ici nous passons le fichier .jrprint , que nous générons à l'étape précédente en utilisant la méthode JasperFillManager.fillReportToFile ()) comme premier paramètre. Le deuxième paramètre est le booléen pour afficher la boîte de dialogue d'impression standard (nous l'avons défini surtrue ici).
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();
}
}
}
Maintenant, sauvegardons ce fichier dans le répertoire C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint. Nous compilerons et exécuterons ce fichier en utilisant ANT. Le contenu de build.xml est comme indiqué ci-dessous -
<?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>
Ensuite, ouvrons l'invite de commande et allons dans le répertoire où build.xml est placé. Enfin, exécutez la commandeant -Dmain-class=com.tutorialspoint.JasperReportPrint. En conséquence, une boîte de dialogue d'impression apparaît. Cliquez sur ok pour imprimer le document.