# JasperReports: Bericht kompilieren und anzeigen/exportieren



## Michaels (10. Aug 2004)

Hallo, 

kann mir jemand einen Quellcode (evtl. inkl. kleiner Anleitung) zur Verfügung stellen der eine xml-Datei über -Klassen kompiliert anzeigt und am Bildschirm (und/oder pdf) anzeigt? 

mfg Michael

_Editiert von P3AC3MAK3R: Titel präzisiert_


----------



## DP (10. Aug 2004)

hast du die print-xml schon erstellt?


----------



## Michaels (11. Aug 2004)

Ja, mit iReport. Ich möchte nun diesen Report aus meiner Anwendung aufrufen, habe keine Ahnung wie das funktionieren soll.


----------



## DP (11. Aug 2004)

sehr gut. hast du schon deine datatource und-factory-klassen erstellt?


----------



## Michaels (11. Aug 2004)

Nein, was ist den das? Ich fange gerade erst an und habe jasperReport erst vor ein paar Tagen herunter geladen.
Ich dachte eine Report-Vorlage (.jrxml), der Aufruf einer Methode die kompiliert und einer weitere Methode die den vorkompilierten Report einliest würde genügen.

Gruß Michael


----------



## DP (11. Aug 2004)

die kommen die daten denn in deinen report?

über beans oder direkt aus der db?!


----------



## Michaels (11. Aug 2004)

Direkt aus der DB.
Ich habe eine hsql-DB aus der ich über einen Query, der im Report definiert ist, Daten auslese und im Report anzeigen lasse. Über iReport funktioniert das ganz gut. Nun versuche ich es ohne iReport.


----------



## DP (11. Aug 2004)

hmmm... damit habe ich noch nicht gearbeitet...

hier haste mal eine testklasse, die mir einen report füllt, vielleicht kannste ja was ableiten:


```
package x.util.print;

import dori.jasper.engine.*;
import dori.jasper.engine.base.*;
import dori.jasper.engine.design.*;
import dori.jasper.engine.export.*;
import dori.jasper.engine.util.*;

import dori.jasper.view.*;
import java.awt.*;
import java.util.*;
import java.text.*;
import java.io.*;

public class PrintTest
{
  public static void main(String[] args)
  {
    File barcode = new File("artikel_barcodelabels.xml"); //xml-report
    print(barcode);
  }

  private static boolean saveReportAsJasperFile(JasperReport pReport, String pDestFile)
  {
    boolean myBool = false;
    try
    {
      if (pReport != null)
      {
        JRSaver.saveObject(pReport, pDestFile);
        File myFile = new File(pDestFile);
        if (myFile.exists())
        {
          myBool = true;
        }
      }
    }
    catch (Exception ex)
    {
    }
    return myBool;
  }

public static void print(File file)
{
  try
  {
    String strJasperFileName = file.getAbsolutePath().toLowerCase().replaceAll(".xml", ".jasper"); // JasperFileName als String
    JasperReport jasperReport = JasperCompileManager.compileReport(file.getAbsolutePath()); // report compilen

    if (saveReportAsJasperFile(jasperReport, strJasperFileName))
    {
      JasperReport jr = (JasperReport) JRLoader.loadObject((file.getName().replaceAll(".xml", "")) + ".jasper");

      BarcodeBean bb = new BarcodeBean();
      bb.setTitle("artikel 1");
      bb.setImagepath("c:\\barcode.gif");

        JasperPrint jasperPrint = JasperFillManager.fillReport(jr, null, new BarcodeDataSource(bb)); //report mit bean füllen...
        JasperPrintManager.printReportToPdfFile(jasperPrint, "c:\\barcode.pdf"); //pdf erstellen
        JasperPrintManager.printReport(jasperPrint, false); //ausdruck ohne drucker-dialog
    }
  }
  catch (Exception e)
  {
    e.printStackTrace();
  }
}

}
```


----------



## Michaels (11. Aug 2004)

Danke für den source-code.

Was mich wundert ist, dass du dori.jasper. statt net.sf.jasperreports. eingegeben hast. Ich habe es geändert und eclipse findet nun auch die benötigten Klassen.

Ich habe folgende Änderung vorgenommen

```
File barcode = new File("C:/Ablage/Java/iReport/Test/test1.jrxml"); //xml-report 
	    String strJasperFileName = file.getAbsolutePath().toLowerCase(); //.replaceAll(".xml", ".jasper"); 	    JasperReport jasperReport = JasperCompileManager.compileReport(strJasperFileName);
```
und bekomme schon folgende Fehlermeldung

```
11.08.2004 10:33:37 org.apache.commons.digester.Digester fatalError
    SCHWERWIEGEND: Parse Fatal Error at line 1 column -1: Zeichenumwandlungsfehler: "Unconvertible UTF-8         
    character beginning with 0xac" (Zeilenzahl möglicherweise zu niedrig)
    org.xml.sax.SAXParseException: Zeichenumwandlungsfehler: "Unconvertible UTF-8 character beginning with 0xac" 
    (Zeilenzahl möglicherweise zu niedrig)
	at org.apache.crimson.parser.InputEntity.fatal(Unknown Source)
	at ....
```


----------



## DP (11. Aug 2004)

evtl. umlaute oder so?


----------



## Michaels (11. Aug 2004)

Hatte mir den Report beim Testen zerschossen.
Wieso verwendest du dori.jasper...?


----------



## DP (11. Aug 2004)

weil der die anderen klassen nicht gefunden hat. wie bei dir


----------



## Michaels (12. Aug 2004)

Danke, 

Quellcode hat geholfen.
Unterschiedlicher Pfad der Klassen ist aus unterschiedlicher Version von jasper zurück zu führen.
(Ich verwende die Vers. 0.0.6 in der 0.5.x Vers. war der Pfad noch dori. ...)

Also nochmals danke, für den ersten Einstig war es recht hilfreich.

mfg Michael


----------



## rwolf (27. Mrz 2005)

sorry, wenn ich mich hier einhänge :

bin newbie zu eclipse ,jasper-reports und ant, kommt mir alles unheimlich kompliziert vor..: ???:L 

gibts denn kein 'hello world'-beispiel, wo man erstmal
die basis hinkriegt ?

1) welche jars muß ich dem eclipse-projekt beifügen ?

2.) kann build.xml direkt von jasper verwendet werden ?

scheint aber gut zu sein, der jasper...

gruß von wolf


----------

