# *.pdf in Java erstellen



## Malcolm X (8. Mai 2006)

Hallo,

ich würde gerne *.pdf Dateien mit Hilfe von Java erzeugen. Bei der Suche bin ich auf die Begriffe Jasper Reports
bzw. Editor IReport gestoßen. Bin ich wenn ich mich in dieser Richtung weiterbewege auf dem richtigen Weg bzw. könnt ihr mir irgend etwas anderes empfehlen?


----------



## vadimiron (8. Mai 2006)

fop - ein maechtiges Tool, aber auch aufwaendig zu lernen

Die Hauptfrage: woraus moechtest du PDF generieren?


----------



## Malcolm X (9. Mai 2006)

Ich erklärs mal ganz grob. Hab eine Anwendung mit deren Hilfe ich Angebote erstellen kann. Die Anwendung hat einen DB Anbindung über JDO/JPOX. In der DB existieren nun u.a. die Tabellen Artikel, Adressen und Vorgang. Ein Vorgang ist nun im Prinzip ein konkretes Angebot an einen Kunden. Dieses Angebot soll nun wahlweise in verschiedenen Formaten dargestellt werden können z.B. *.pdf, *.doc usw.. Die Daten die für die *.pdf Datei benötigt werden müssen also aus der DB ausgelesen werden. Ein Ausdrucken soll ebenfalls möglich sein. 

Womit kann ich sowas am einfachsten realisieren?


----------



## kama (9. Mai 2006)

Hallo,

also um einfach nur PDF's zu erstellen würde ich mir iText anschauen. Wenn es um mehr geht und so hört sich das an würde ich mir mal Jasper Reports genauer anschauen.

MfG
Karl Heinz Marbaise


----------



## Malcolm X (9. Mai 2006)

Hab mich ein wenig mit Jasper Reports beschäftigt. Beim Compilieren zeigt mir Eclipse folgenden Fehler an:

net.sf.jasperreports.engine.JRException: Report design not valid : 
	 1. Warning : Element bottom reaches outside band area : y=60 height=50 band-height=50
	at net.sf.jasperreports.engine.design.JRAbstractCompiler.verifyDesign(JRAbstractCompiler.java:267)
	at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:144)
	at net.sf.jasperreports.engine.design.JRDefaultCompiler.compileReport(JRDefaultCompiler.java:104)
	at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:211)
	at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:144)
	at Example1.main(Example1.java:23)

Mein Code sieht so aus:


```
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 Example1 
{
	public static void main(String[] args) 
	{
		JasperReport jasperReport;
		JasperPrint jasperPrint;
		HashMap<String, String> parameter = new HashMap<String, String>(); 
		
		parameter.put("aParameter", "hallo");
		
		try 
		{			
			jasperReport = JasperCompileManager.compileReport("Example1.jrxml");
		    jasperPrint = JasperFillManager.fillReport(jasperReport, parameter, new JREmptyDataSource());
		    JasperExportManager.exportReportToPdfFile(jasperPrint, "Example1.pdf");
		}
		catch (JRException e) 
		{
		      e.printStackTrace();
		}
	}
}
```

die entsprechende xml Datei folgendermaßen:


```
<?xml version="1.0" encoding="UTF-8"  ?>
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport name="Example1">

 <parameter name="aParameter" class="java.lang.String"/>

 <detail>
  <band height="50">
   <textField >
    <reportElement x="200" y="60" width="200" height="50" />      
    <textElement><font size="36"/></textElement>
    <textFieldExpression class="java.lang.String"><![CDATA[$P{aParameter}]]></textFieldExpression>
   </textField>
  </band>
 </detail>

</jasperReport>
```


Könnt ihr mir sagen wo mein Fehler liegt?


----------



## Wiesel (5. Okt 2006)

Deinen Fehler kann ich dir sagen:

Das Detail-Band bei dir ist nur 50 Pixel hoch, das Element in dem du den aParameter ausgeben willst ist aber auch 50 Pixel hoch und fängt erst bei 60 Pixel vom oberen Rand des Bandes an, was garnicht geht.
Also machst du entweder das Detail-Band wesentlich höher, oder du machst das Element + den Offset vom Rand kleiner als die 50 Pixel des Detailbandes.

Ich hoffe das ist noch irgendwie nützlich hier...
Gruß Wiesel


----------



## Revenant (5. Okt 2006)

Also ich musste ne Weile auch mal sowas machen. War ziemlich nervig irgendwie, zumal meine Schnittstelle (iText) zwar sehr einfach zu bedienen, aber doch recht eigen war was fortgeschrittenes Layout angeht. 

iText besitzt halt ne sehr gute Dokumentation. Fürn Anfang is es nicht schlecht denk ich.


----------



## suikast42 (5. Okt 2006)

Hallo hab das geleiche problem. 

Bin zwar bissle erfahren in java aber nicht so ganz. Wenn ich das paket runterlade wo muss ich es hinpacken damit ich 
es so
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException; 

importieren kann???


----------

