JasperReport in Java Beispiel

Hallo,

ich will mit JasperReports einen Bericht für eine Java Swing Anwendung erstellen, jetzt fehlt mir aber leider jegliche Kenntnis darüber wie ich diese in iReport erstellte .jxrml Datei in die Java Anwendung integriere, es wäre echt total nett wenn jemand mit Erfahrung mal so eine kleine schnelle java-swing Anwendung erstellen könnte und nen kleine Report dazu, der in der java Anwendung integriert ist! Ich komme leider mit den spärlichen tutorials nicht zurecht!

Vielen dank im vorraus!

mfg

hi,

die Vorlage(speichern als TestReport.jrxml - Schreibweise ist wichtig!):

<?xml version="1.0" encoding="UTF-8" ?>

Du brauchst für folgende libs in Deinem Java Projekt:

jasperreports-1.2.3.jar
commons-digester-1.7.jar
commons-collection-2.1.jar
commons-logging-api-1.0.2.jar
commons-beanutils-1.5.jar
commons-javaflow-20060411.jar
itext-1.3.1.jar

die Versionen können abweichen. Die libs findest du z.b. in deinem iReport Verzeichnis /lib. Hier die Applikation:

import java.util.HashMap;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;

public class TestJasper {


 public void testIt() throws JRException{

 JasperReport jasperReport;
 JasperPrint jasperPrint;

 jasperReport = JasperCompileManager.compileReport(
 "TestReport.jrxml");
 jasperPrint = JasperFillManager.fillReport(
 jasperReport, new HashMap(), new JREmptyDataSource());
 JasperExportManager.exportReportToPdfFile(
 jasperPrint, "testReport.pdf"); 
 }

 public static void main(String[] args) {

 try {

 new TestJasper().testIt();
 System.out.println("pdf created...");

 } catch (JRException e) { 
 e.printStackTrace();
 }
 } 
}

Das ist jetzt eine leere Datasource, das heißt es werden noch keine Daten übergeben.

Gruß Bonkers

als swing beispiel:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;

import javax.swing.JButton;
import javax.swing.JFrame;

import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.export.JRPrintServiceExporter;
import net.sf.jasperreports.engine.export.JRPrintServiceExporterParameter;
import net.sf.jasperreports.view.JasperViewer;

public class TestJasper extends JFrame implements ActionListener{

 private JButton btn\_print = new JButton("Drucken...");
 private JasperPrint jasperPrint;

 public TestJasper(){
 setSize(800,600);
 getContentPane().setLayout(new BorderLayout());
 setDefaultCloseOperation(JFrame.EXIT\_ON\_CLOSE);
 btn\_print.addActionListener(this);

 try {
 jasperPrint = initReport("TestReport.jrxml");
 } catch (JRException e) { 
 e.printStackTrace();
 }

 JasperViewer jv = new JasperViewer(jasperPrint);
 getContentPane().add(jv.getContentPane(), BorderLayout.CENTER);
 getContentPane().add(btn\_print, BorderLayout.SOUTH);

 setVisible(true);
 }


 public JasperPrint initReport(String name) throws JRException{

 JasperReport jasperReport = JasperCompileManager.compileReport(name);
 JasperPrint jasperPrint = JasperFillManager.fillReport(
 jasperReport, new HashMap(), new JREmptyDataSource());
 return jasperPrint;
 }

 public void actionPerformed(ActionEvent e) {
 if (e.getSource() == btn\_print){ 

 //JasperExportManager.exportReportToPdfFile(jasperPrint, "testReport.pdf");
 JRExporter exporter = new JRPrintServiceExporter();
 exporter.setParameter(JRExporterParameter.JASPER\_PRINT, jasperPrint);
 exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY\_PRINT\_DIALOG, Boolean.TRUE);
 try {
 exporter.exportReport();
 } catch (JRException e1) {
 e1.printStackTrace();
 }
 } 
 } 

 public static void main(String[] args) { 
 new TestJasper();
 }
}

hi!

vielen vielen Dank für den ausführlichen code, ich werd mich am Wochenende, wenn ich Zeit hab, mal damit beschäftigen… Aber ich glaub jetzt wird schon alles viel klarer :smiley:

Thx!

mfg

jetzt noch ne Frage, wenn ich jetzt ein Textfeld in den Detailbereich erstelle, wie kann ich das dann mit Java füllen? Finde da leider keinen Befehl!

Vielen Dank!

mfg

dazu musst du dem report beim füllen irgendeine quelle für die daten mitgeben. im detailbereich stehen ja die daten die in der regel mehrfach vorhanden sind.
das heißt du hast z.b. eine adressliste, wo 20 namen drin stehen. jetzt erstellst du im report ein textfeld „name“. dann übergibst du dem report deine datenquelle die die liste mit den namen enthält, das kann eine datenbankverbindung sein, eine xml-datei oder was auch immer jasper noch alles unterstützt.
im detailbereich werden dann die 20 namen untereinander angezeigt.

Schau mal hier, da steht unter „All Known Implementing Classes“ was jasper alles an datasources unterstützt:

http://jasperreports.sourceforge.net/api/net/sf/jasp…

Darunter auch TableModel und MapCollection, das könnte für dcih interessant sein. Hier das hab ich aus einem Forum, keinen Ahnung ob das funktioniert, brauchst du java 5 für:

Collection\> myColl = new ArrayList\>();
Map map1 = new HashMap();
map1.put("Field1","value1");
myColl.add(map1);

Map map2 = new HashMap();
map2.put("Field1","value1");
myColl.add(map2);

JRMapCollectionDataSource dataSource= new JRMapCollectionDataSource(myColl);
JasperFillManager.fillReport(jr, reportParameters, dataSource); 

gruß b.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]