PDF erzeugen mit FOP(fo fehlerhaft)

Holy Diver

Mitglied
Hallo zusammen ,
ich versuche gerade mit FOP-1.0 Daten aus einer mySql-Datenbank in einem PDF zu speichern.
Dazu habe ich mich bis jetzt sehr an den FOP-Beispielen von Apache(die beim Download enthalten sind) orientiert. Das erzeugen des XML-Files funktioniert ohne Probleme, auch beim erzeugen des FO-Files gibt es keine Warnings oder Errors.
Beim erzeugen des PDFs kommt es aber zur folgenden Fehlermeldung: Content is not allowed in prolog.
Der Grund dafür ist ,dass die FO-Datei folgender maßen aussieht:
[XML]<?xml version="1.0" encoding="UTF-8"?>2012-02-10 10:57:04.02402.121000.0221.022012-02-10 10:57:05.02412.121000. ..... 0.0221.02[/XML]


Die Klasse die diese Datei erzeugt ist 1:1 die aus dem Beispielen :
Java:
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;

import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class XML2FO {
	

	public void convertXML2FO(File xml, File xslt, File fo)
	 	throws IOException, TransformerException {
	 	
	 	//Setup output
	 	OutputStream out = new java.io.FileOutputStream(fo);
	 	try {
	 	//Setup XSLT
	 	TransformerFactory factory = TransformerFactory.newInstance();
	 	Transformer transformer = factory.newTransformer(new StreamSource(xslt));
	 	
	 	//Setup input for XSLT transformation
	 	Source src = new StreamSource(xml);
	 	
	 	//Resulting SAX events (the generated FO) must be piped through to FOP
	 	Result res = new StreamResult(out);
	 	
	 	//Start XSLT transformation and FOP processing
		transformer.transform(src, res);
	 	} finally {
	 	out.close();
	 	}
	}
}
Die verwendete xml-Datei wurde in einer Zeile erzeugt, ich habe sie aber zu besseren Lesbarkeit aber ein bisschen formatiert:
[XML]<?xml version="1.0" encoding="UTF-8"?>
<MWs>
<MW>
<time>2012-02-10 10:57:04.0</time><gw_ID>2</gw_ID><ID>40</ID>
<U><Spannung>2.1</Spannung><Status>2</Status></U><dc><Drehzahl>1000.0</Drehzahl><Status>2</Status></dc><t><Temperatur>21.0</Temperatur><Status>2</Status></t>
</MW><MW>
<time>2012-02-10 10:57:05.0</time><gw_ID>2</gw_ID><ID>41</ID>
<U><Spannung>2.1</Spannung><Status>2</Status></U><dc><Drehzahl>1000.0</Drehzahl><Status>2</Status></dc><t><Temperatur>21.0</Temperatur><Status>2</Status></t>
</MW><MW>
<time>2012-02-10 10:57:06.0</time><gw_ID>2</gw_ID><ID>42</ID>
<U><Spannung>2.1</Spannung><Status>2</Status></U><dc><Drehzahl>1000.0</Drehzahl><Status>2</Status></dc><t><Temperatur>20.5</Temperatur><Status>2</Status></t>
</MW><MW>
<time>2012-02-10 10:57:08.0</time><gw_ID>2</gw_ID><ID>43</ID>
<U><Spannung>2.1</Spannung><Status>2</Status></U><dc><Drehzahl>1000.0</Drehzahl><Status>2</Status></dc><t><Temperatur>20.5</Temperatur><Status>2</Status></t>
</MW><MW><time>2012-02-10 10:57:09.0</time><gw_ID>2</gw_ID><ID>44</ID>
<U><Spannung>2.1</Spannung><Status>2</Status></U><dc><Drehzahl>1000.0</Drehzahl><Status>2</Status></dc><t><Temperatur>21.0</Temperatur><Status>2</Status></t>
</MW><MW>
<time>2012-02-10 10:57:10.0</time><gw_ID>2</gw_ID><ID>45</ID>
<U><Spannung>2.1</Spannung><Status>2</Status></U><dc><Drehzahl>1000.0</Drehzahl><Status>2</Status></dc><t><Temperatur>21.0</Temperatur><Status>2</Status></t>
</MW>
</MWs>[/XML]
Und zum Schluss noch die XSL-Datei:
[XML]
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:root>
<fo:layout-master-set>


</fo:layout-master-set>
<fo:page-sequence master-reference="CoverPage">
<fo:flow flow-name="xsl-region-body">
<fo:block>
<fo:table height="100%" width="100%" border="1.5mm double black" block-progression-dimension="auto" table-layout="auto">
<fo:table-column column-width="1.6cm" />
<fo:table-column column-width="1.3cm" />
<fo:table-column column-width="1.3cm" />
<fo:table-column column-width="1.6cm" />
<fo:table-column column-width="1.6cm" />
<fo:table-column column-width="1.6cm" />

<!-- HEADER -->
<fo:table-header>
<fo:table-row>
<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black">
<fo:block >Time</fo:block></fo:table-cell>
<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black"><fo:block >ID</fo:block></fo:table-cell>
<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black"><fo:block >gw_ID</fo:block></fo:table-cell>
<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black"><fo:block >Spannung</fo:block></fo:table-cell>
<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black"><fo:block >Drehzahl</fo:block></fo:table-cell>
<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black"><fo:block >Temperatur</fo:block></fo:table-cell>
</fo:table-row>
</fo:table-header>
<fo:table-body>
<xsl:for-each select="MWs/MW"><fo:table-row>
<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black">
<fo:block><xsl:value-of select="time" /></fo:block></fo:table-cell>
<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black">
<fo:block ><xsl:value-of select="ID" /></fo:block></fo:table-cell>
<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black">
<fo:block><xsl:value-of select="gw_ID" /></fo:block></fo:table-cell>

<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black">
<xsl:choose>
<xsl:when test="U/Status='2'"><fo:block background-color="red"><xsl:value-of select="U/Spannung" /></fo:block></xsl:when>
<xsl:when test="U/Status='1'"><fo:block background-color="yellow"><xsl:value-of select="U/Spannung" /></fo:block></xsl:when>

<xsl:eek:therwise><fo:block><xsl:value-of select="U/Spannung" /></fo:block></xsl:eek:therwise>
</xsl:choose>
</fo:table-cell>

<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black">
<xsl:choose>
<xsl:when test="dc/Status='2'"><fo:block background-color="red"><xsl:value-of select="dc/Drezahl" /></fo:block></xsl:when>
<xsl:when test="dc/Status='1'"><fo:block background-color="yellow"><xsl:value-of select="dc/Drezahl" /></fo:block></xsl:when>

<xsl:eek:therwise><fo:block><xsl:value-of select="dc/Drezahl" /></fo:block></xsl:eek:therwise>
</xsl:choose>
</fo:table-cell>

<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black">
<xsl:choose>
<xsl:when test="t/Status='2'"><fo:block background-color="red"><xsl:value-of select="t/Temperatur" /></fo:block></xsl:when>
<xsl:when test="t/Status='1'"><fo:block background-color="yellow"><xsl:value-of select="t/Temperatur" /></fo:block></xsl:when>

<xsl:eek:therwise><fo:block><xsl:value-of select="t/Temperatur" /></fo:block></xsl:eek:therwise>
</xsl:choose>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>
</fo:table-body></fo:table></fo:block>
</fo:flow>
</fo:page-sequence>

</fo:root>
</xsl:stylesheet>
[/XML]

Ich hoffe von euch hat jemand eine Idee, woran das liegen könnte. Es ist nämlich das erste Mal, dass ich FOB benutze und ich bin gerade ziemlich ratlos.

Bin für jede Hilfe dankbar.
 

Holy Diver

Mitglied
Ich habe den Fehler jetzt gefunden, er liegt in der XSL und zwar hatte ich kein apply-templates und keine Templates, was dazu führte dass das Standard-Template benutzt wurde und mein xsl nicht verwendet wurde.
Die richtige XSL wäre:

[XML]
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">

<xsl:template match="/">
<fo:root>

<fo:layout-master-set>
<fo:simple-page-master master-name="A4-landscape"
page-height="21.0cm" page-width="29.7cm" margin="0.75cm 2cm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>

<fo:page-sequence master-reference="A4-landscape">
<fo:flow flow-name="xsl-region-body">
<fo:block>
<fo:table height="100%" width="100%" border="1.5mm double black" block-progression-dimension="auto" table-layout="auto">
<fo:table-column column-width="3.5cm" />
<fo:table-column column-width="2.4cm" />
<fo:table-column column-width="2.4cm" />
<fo:table-column column-width="2.4cm" />
<fo:table-column column-width="2.4cm" />
<fo:table-column column-width="2.4cm" />

<!-- HEADER -->
<fo:table-header>
<fo:table-row height="0.6cm">
<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black">
<fo:block text-align="center">Zeitpunkt</fo:block></fo:table-cell>
<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black"><fo:block text-align="center">ID</fo:block></fo:table-cell>
<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black"><fo:block text-align="center">gw_ID</fo:block></fo:table-cell>
<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black"><fo:block text-align="center">Spannung</fo:block></fo:table-cell>
<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black"><fo:block text-align="center">Drehzahl</fo:block></fo:table-cell>
<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black"><fo:block text-align="center">Temperatur</fo:block></fo:table-cell>
</fo:table-row>
</fo:table-header>
<fo:table-body>

<xsl:apply-templates select="MWs/MW" />

</fo:table-body></fo:table></fo:block>
</fo:flow>
</fo:page-sequence>

</fo:root>
</xsl:template>

<xsl:template match="MW">
<fo:table-row>
<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black">
<fo:block text-align="center"><xsl:value-of select="time" /></fo:block></fo:table-cell>
<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black">
<fo:block text-align="center"><xsl:value-of select="ID" /></fo:block></fo:table-cell>
<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black">
<fo:block text-align="center"><xsl:value-of select="gw_ID" /></fo:block></fo:table-cell>

<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black">
<xsl:choose>
<xsl:when test="U/Status='2'"><fo:block background-color="red" text-align="center"><xsl:value-of select="U/Spannung" /></fo:block></xsl:when>
<xsl:when test="U/Status='1'"><fo:block background-color="yellow" text-align="center"><xsl:value-of select="U/Spannung" /></fo:block></xsl:when>

<xsl:eek:therwise><fo:block text-align="center"><xsl:value-of select="U/Spannung" /></fo:block></xsl:eek:therwise>
</xsl:choose>
</fo:table-cell>

<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black">
<xsl:choose>
<xsl:when test="dc/Status='2'"><fo:block background-color="red" text-align="center"><xsl:value-of select="dc/Drehzahl" /></fo:block></xsl:when>
<xsl:when test="dc/Status='1'"><fo:block background-color="yellow" text-align="center"><xsl:value-of select="dc/Drehzahl" /></fo:block></xsl:when>

<xsl:eek:therwise><fo:block text-align="center"><xsl:value-of select="dc/Drehzahl" /></fo:block></xsl:eek:therwise>
</xsl:choose>
</fo:table-cell>

<fo:table-cell number-columns-spanned="1" border-right="0.5mm solid black" border-bottom="1mm solid black">
<xsl:choose>
<xsl:when test="t/Status='2'"><fo:block background-color="red" text-align="center"><xsl:value-of select="t/Temperatur" /></fo:block></xsl:when>
<xsl:when test="t/Status='1'"><fo:block background-color="yellow" text-align="center"><xsl:value-of select="t/Temperatur" /></fo:block></xsl:when>

<xsl:eek:therwise><fo:block text-align="center"><xsl:value-of select="t/Temperatur" /></fo:block></xsl:eek:therwise>
</xsl:choose>
</fo:table-cell>
</fo:table-row>
</xsl:template>

</xsl:stylesheet>
[/XML]
 
S

SlaterB

Gast
hmm, ganz übersehen,
ein Parade-Thema für mich, sowas habe ich eigentlich auch täglich,

was wäre nur ein XSLT-Prozessor mit guten Fehlermeldungen und ausführlichen Log der Aktionen, wann welches Template drankommt usw., hilfreich,
könnte man theoretisch auch selber schreiben, muss ja nicht gleich PDF bzw. auch nur FO rauskommen, nur bisschen Analyse, aber die Zeit für sowas..
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Erzeugen einer openapi spec via swagger XML & JSON 1
W Erzeugen einer Handlerklasse zum Abfangen von SOAP-Requests XML & JSON 13
J Object in JSON Datei einlesen und als neues Object erzeugen (in ein Object Array) XML & JSON 29
A GUI um auf XSD Basis (valide) XML Daten zu erzeugen XML & JSON 3
C XML erzeugen Tipps und Tricks XML & JSON 7
M JAXB versucht abstrakte Klasse zu erzeugen XML & JSON 7
J XML Parser anhand xsd erzeugen XML & JSON 2
A Fehler beim Erzeugen eines XML-Schema XML & JSON 4
S JDOM ohne XML Header erzeugen? XML & JSON 2
R XSD aus Java Klassen erzeugen?? XML & JSON 2
S Aus XML-File eine Baumstruktur erzeugen XML & JSON 5
P cxf: WSDL dynamisch erzeugen (zur Laufzeit) XML & JSON 7
F XML erzeugen aus JTree und wieder einlesen... XML & JSON 6
N Teilbaum aus DOM-Baum erzeugen XML & JSON 5
sylo Beim Erzeugen einer XML Datei auch die XML Struktur erzeugen? XML & JSON 11
S Java - Klassen erzeugen aus xsd bzw. wsdl XML & JSON 3
J Objektstruktur aus XML-Datei erzeugen XML & JSON 21
T Einzug bei XSLTransformator erzeugen XML & JSON 3
P XSD Schema: Konstanten mit "fixed" erzeugen geht nicht ??? XML & JSON 3
G Welche Klassen zum erzeugen/auslesen eines XML Files verwend XML & JSON 9
B jdom document aus string erzeugen? XML & JSON 1
H PDFs erzeugen mit Apache FOP XML & JSON 3
D XML Datei mit DOM erzeugen XML & JSON 6
G JAXB Objekte erzeugen XML & JSON 3
E XOM setzen von XML-Schema declaration beim erzeugen XML-File XML & JSON 2
B DTD aus Java erzeugen XML & JSON 2
M PDF erzeugen aus Stringarray XML & JSON 1
G XML Dokument mit DOM erzeugen XML & JSON 9
S svg erzeugen XML & JSON 2
B org.w3c.dom.Node erzeugen XML & JSON 2
B XML-Document mit Java erzeugen und zuruecksenden XML & JSON 1
S Menüeinträge aus XML erzeugen XML & JSON 21
K xml Datei mit JDOM erzeugen, Problem Namespaces XML & JSON 1

Ähnliche Java Themen

Neue Themen


Oben