# Suche einfaches JasperReports Tutorial



## Vatar (16. Jan 2005)

Nabend. 
Ich suche ein einfaches Tutorial für den Umgang mit JasperReports, da bei mir irgendwie gar nix funktioniert.
Ich benutze auch den ireport und habe mir da auch schon was zusammengebastelt. Ich habe auch schon gelesen dass ich der Report dann nochmal selber compilieren muss, da JR sonst einen Fehler wegen ungültiger Version ausgibt. Das ist auch so ziemlich das einzige was funktioniert.


```
JasperManager.compileReportToFile("x.jrxml, "x.jasper");
```

Dann dachte ich mir ich könne nun einfach mal einen report, ohne Daten erzeugen. Aber das funktioniert nicht. Oder eher gesagt ich hab keine Ahnung davon. Ich hab zwar schon ein Tutorial gefunden, welches aber viel zu viel schnickschnack betreibt (Auswahlmögllichkeit, usw). Ich will einfach wissen wie ich erst mal einen ganz simplem Report in einer Voransicht sehe und diesen dann drucken kann.

Danke


----------



## Vatar (18. Jan 2005)

Also da es anscheinend keine tuts gibt, schreib ich einfach mal mein Problem hier rein.

Ich habe wie gesagt mit iReport einen report erzeugt und möchte diesen nun füllen.

```
JasperPrint print = JasperFillManager.fillReport("C://Temp//x.jasper", null, Database.getConnection());
```
Ich bekomme aber immer eine Fehlermeldung

```
net.sf.jasperreports.engine.base.JRBaseReport; local class incompatible: stream classdesc serialVersionUID = 601, 
local class serialVersionUID = 603
```
Zu diesem Fehler habe ich schon gelesen, dass ich den Report mit meiner aktuellen JasperReportsVersion noch mal neu kompilieren muss. Das habe ich, vor dem "fill..", wie folg getan

```
JasperCompileManager.compileReportToFile(path, "C://Temp//x.jasper");
```
Das ist auch die einzige Anweisung bei der ich bisher keinen Fehler bekommen habe.

Ich hoffe ihr könnt mit helfen.
Thx


----------



## DP (18. Jan 2005)

hi, hier mal ein auszug aus meinem code, vielleicht hilft es dir ja:


```
OrderManager om = new OrderManager();
Vector bestellungen = om.searchBestellungen(auftragsnummer, null, null, null, null, null, true);
OrderBean ob = (OrderBean) bestellungen.get(0);
File invoice = new File("rechnung_de.jasper");
JasperReport jr = (JasperReport) JRLoader.loadObject(invoice.getAbsolutePath());
JasperPrint jasperPrint = JasperFillManager.fillReport(jr, null, new JRTestDataSource(ob));
JasperPrintManager.printReportToPdfFile(jasperPrint, "rechnung_" + ob.getAuftragsnummer() + ".pdf");
```


----------



## Vatar (18. Jan 2005)

Schon mal danke, leider funktioniert es so auch nicht.
Ich hab die drei letzten Zeilen wie folgt übernommen.

```
JasperReport jasper = (JasperReport)JRLoader.loadObject("C://Temp//x.jasper");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasper, null, Database.getConnection());
JasperPrintManager.printReportToPdfFile(jasperPrint, "x.pdf");
```
Es wird wieder die besagte Exception geschmissen. java.io.InvalidClassException


----------



## DP (18. Jan 2005)

poste doch mal den gesamten stacktrace


----------



## Vatar (18. Jan 2005)

OK. Wenn du das wirklich willst. ;-)


```
java.io.InvalidClassException: net.sf.jasperreports.engine.base.JRBaseReport; local class incompatible: stream classdesc serialVersionUID = 601, local class serialVersionUID = 603
	at java.io.ObjectStreamClass.initNonProxy(Unknown Source)
	at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
	at java.io.ObjectInputStream.readClassDesc(Unknown Source)
	at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
	at java.io.ObjectInputStream.readClassDesc(Unknown Source)
	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
	at java.io.ObjectInputStream.readObject0(Unknown Source)
	at java.io.ObjectInputStream.readObject(Unknown Source)
	at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:129)
	at net.sf.jasperreports.engine.util.JRLoader.loadObjectFromLocation(JRLoader.java:279)
	at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluate(JRFillSubreport.java:338)
	at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:383)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:1298)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:630)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:254)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:162)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:684)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:519)
	at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:120)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:291)
	at gui.Report.generate(Report.java:50)
	at gui.GUI_Loader$ButtonListener.actionPerformed(GUI_Loader.java:1367)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

NESTED BY :
java.io.InvalidClassException: net.sf.jasperreports.engine.base.JRBaseReport; local class incompatible: stream classdesc serialVersionUID = 601, local class serialVersionUID = 603
	at java.io.ObjectStreamClass.initNonProxy(Unknown Source)
	at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
	at java.io.ObjectInputStream.readClassDesc(Unknown Source)
	at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
	at java.io.ObjectInputStream.readClassDesc(Unknown Source)
	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
	at java.io.ObjectInputStream.readObject0(Unknown Source)
	at java.io.ObjectInputStream.readObject(Unknown Source)
	at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:129)
	at net.sf.jasperreports.engine.util.JRLoader.loadObjectFromLocation(JRLoader.java:279)
	at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluate(JRFillSubreport.java:338)
	at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:383)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:1298)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:630)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:254)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:162)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:684)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:519)
	at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:120)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:291)
	at gui.Report.generate(Report.java:50)
	at gui.GUI_Loader$ButtonListener.actionPerformed(GUI_Loader.java:1367)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

NESTED BY :
net.sf.jasperreports.engine.JRException: Error loading object from file : C:\kleine Programme\iReport-0.4.0\PlanniSchmiermittel.jasper
	at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:133)
	at net.sf.jasperreports.engine.util.JRLoader.loadObjectFromLocation(JRLoader.java:279)
	at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluate(JRFillSubreport.java:338)
	at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:383)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:1298)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:630)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:254)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:162)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:684)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:519)
	at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:120)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:291)
	at gui.Report.generate(Report.java:50)
	at gui.GUI_Loader$ButtonListener.actionPerformed(GUI_Loader.java:1367)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.io.InvalidClassException: net.sf.jasperreports.engine.base.JRBaseReport; local class incompatible: stream classdesc serialVersionUID = 601, local class serialVersionUID = 603
	at java.io.ObjectStreamClass.initNonProxy(Unknown Source)
	at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
	at java.io.ObjectInputStream.readClassDesc(Unknown Source)
	at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
	at java.io.ObjectInputStream.readClassDesc(Unknown Source)
	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
	at java.io.ObjectInputStream.readObject0(Unknown Source)
	at java.io.ObjectInputStream.readObject(Unknown Source)
	at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:129)
	... 36 more
```

Nochmals Danke für den Elan.  :applaus:


----------



## DP (18. Jan 2005)

welche ireport- und jasperreport-version nutzt du denn?


----------



## Vatar (18. Jan 2005)

JasperReport 0.6.3
iReport 0.4.0

also jeweils die aktuellsten


----------



## DP (18. Jan 2005)

ireport läuft nur bis jasperreport 0.6.1  :?


----------



## Vatar (18. Jan 2005)

Das hatte ich mir auch schon gedacht, aber ich hab nur links für die 0.6.3er Version gefunden.
Hast du eventuell noch die alte, dann schick ich dir ne pm mit meiner email?


----------



## DP (18. Jan 2005)

neh, sorry. ich arbeite mit der 0.5.3er


----------



## P3AC3MAK3R (19. Jan 2005)

Vatar hat gesagt.:
			
		

> Das hatte ich mir auch schon gedacht, aber ich hab nur links für die 0.6.3er Version gefunden.
> Hast du eventuell noch die alte, dann schick ich dir ne pm mit meiner email?


Man geht einfach auf diese Seite und wählt dort den Link "[View ALL Project Files]" an.


----------



## Vatar (19. Jan 2005)

P3AC3MAK3R hat gesagt.:
			
		

> Vatar hat gesagt.:
> 
> 
> 
> ...


Danke.



Es funktioniert jetzt auch schon ganz gut.
Hab aber noch 2 kleine Probleme (Ich lasse mir den Report bisher nur im Viewer anzeigen): 

Wenn ich den Viewer schließe, wird meine gesammte Applikation beendet?

```
JasperReport jasper = (JasperReport)JRLoader.loadObject("./bin/data/JasperReportFiles/Planni.jasper");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasper, null, Database.getConnection());
JasperViewer.viewReport(jasperPrint);
```


Auf meinem Hauptreport befinden sich (im Detail-Block) 2 Subreports (ein dritter soll noch dazu kommen), welche nur den Inhalt meiner Tabellen ausgeben soll (nur wenn daten drin sind). Das funktioniert eigentlich auch, nur dass der erste Subreport  im letzten Zentimeter von dem zweiten überdeckt wird. Dieser Fall ist auch schon bei iReport eingetreten, wenn ich einen Testdurchlauf gemacht habe. Ich habe aber bisher keine Lösung gefunden (ich habe z.B. die Bereiche in der Größe verändert)


[edit]
Noch eine Kleinigkeit: Wie kann ich meiner SQL-Query einen Parameter übergeben? Bisher wird mein Report nur mit dem Standardwert ausgeführt.
Hat das was mit dierser Map parameters etwas zu tun? und falls ja muss ich dann eine eigene Klasse, welche dieser Interface Map hat implementieren oder kann ich da schon etwas vorgefertigtes nehmen?


Thx


----------



## Vatar (20. Jan 2005)

Ok die Sache mit den Parametern hab ich hinbekommen (fleisig  :###  hilf doch ab und an)

Ich poste mal den Code falls jemand nach sowas suchen sollte (anscheinend befassen sich ja nicht allzu viele Leute damit)

```
public static void generate (String fahrgestellnummer)
    {
        // ACHTUNG: kompiliert wurde schon vorher
        try
        {
            HashMap hashMap = new HashMap();
                // der erste Parameter entspricht dem Namen des Parameters [b]im[/b] Report selbst.
                // Die HashMap kann dann einfach der fillReport(...) übergeben werden.
        	hashMap.put("fahrgestellnummer", fahrgestellnummer);
            
            JasperReport jasper = (JasperReport)JRLoader.loadObject("./bin/data/JasperReportFiles/Planni.jasper");
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasper, hashMap, Database.getConnection());
            JasperViewer.viewReport(jasperPrint);  
        }catch(Exception e){e.printStackTrace();}
    }// endmethod
```

aber die anderen Probleme hab ich immer noch


----------



## Vatar (22. Jan 2005)

Also die Sache, dass sich die gesammte Applikation beendet, wenn ich den JasperViewer schließe hätte ich gleöst (api lesen hilf    )

```
JasperViewer.viewReport(jasperPrint, false); // 2.Parameter = EXIT_ON_CLOSE?
```


----------



## Gast (20. Feb 2005)

Hallo DP, wie bindet man die Bibliotheken an, kannst du bitte kleine anleitung posten ? weil bei mir geht das alles irgendwie nicht, ich habe alles runtergeladen wass man dazu braucht Ant,Collection,iText,und so weiter, wohin soll ich diese zusätliche Bibliotheken kopieren.

Danke in voraus


----------



## DP (20. Feb 2005)

wie das mit ant ausgerollt wird > keine ahnung. 

kannste aber locker "zu fuß" machen... in die classpath reinkopieren und nutzen. 

hast du schon einen report erstellt?!


----------



## XXL (20. Feb 2005)

Hi, ja mit iReport erstellt aber jetzt wenn ich die classen von JasperReport in meine Programm den packet einfüge dann bekomme ich bei der Ausführung ständig Fehlermeldungen dass viele claasen nicht gefunden sind 

könntest du ein kleine Projektbeispiel mit integrierten JasperReport klassen posten, ich wäre dir dafür sehr dankbar

E-mail: tophardware@web.de


----------



## DP (20. Feb 2005)

steht doch eine seite vorher. ich übergebe ein normales bean (getter+setter) in eine factory etc. beispiel-factories findest du im release.

der ireport ist allerdings rech buggy, daher funktionieren die viele sachen trotz fehlermeldung (auch method not found oder so). also immer mal schauen ob der eine xml-datei mit deinem report erzeugt.


----------



## Dauergast (21. Feb 2005)

Setze zur Laufzeit die Umgebungsvariable JASPER_CLASSPATH, 
damit der JasperCompiler an die nötigen Klassen rankommt.
z.B.

JASPER_CLASSPATH=jasperreports.jar;commons-beanutils.jar;commons-collections.jar;commons-digester.jar;commons-logging.jar;commons-logging-api.jar

Gruß,
Dauergast


----------



## Gast (29. Jul 2005)

Vatar hat gesagt.:
			
		

> Also die Sache, dass sich die gesammte Applikation beendet, wenn ich den JasperViewer schließe hätte ich gleöst (api lesen hilf    )
> 
> ```
> JasperViewer.viewReport(jasperPrint, false); // 2.Parameter = EXIT_ON_CLOSE?
> ```


----------



## DP (29. Jul 2005)

???:L


----------



## Guest (27. Apr 2006)

Hallo Leute auch ich beschäftige mich grad mit dem Jasper. Ich bin Gedanklich auch schon ziemlich weit gekommen, nur hackt es bei mir an einer Stelle:


```
SELECT * FROM Sendung WHERE ID = ?;
```

In java kann ich das ? mit einem Prepared Statement sozusagen Modifizieren. Wie muss der SQL Syntax in Jasper aussehen um den gleichen Effekt zu bekommen?? Wie kann ich den Parameter dann zuweisen?? Das sind die Fragen die mich so imens quälen wobei ich meine das es wieder mal so ein Grundlegend elemtare Sache ist die normalerweise an jeder Ecke stehen sollte.

Um Hilfe wäre ich imens dankbar  :wink: 

Gruss Waldi


----------



## DP (27. Apr 2006)

schau dir mal das ireport an, das kannste dann dialoggeführt machen und dir dann die xml anschauen.


----------

