FOP liefert fehlerhafte PDF

Status
Nicht offen für weitere Antworten.

Shaddow

Mitglied
Hi, bin grad ne Weile am Rumbasteln mit FOP und bin inzwischen soweit, dass tatsächlich eine PDF generiert wird.
Mein PDFGenerator liefert keine Fehler, der Quellcode:
Java:
public class PDFGenerator 
{
	private static FopFactory fopFactory = FopFactory.newInstance();
	
	public static void convertXML2PDF(String xml, File xslt, File pdf)
			throws IOException, FOPException, TransformerException 
	{

		// Step 2: Set up output stream.
		// Note: Using BufferedOutputStream for performance reasons (helpful with FileOutputStreams).
		OutputStream out = new BufferedOutputStream(new FileOutputStream(pdf));

        try 
        {
            //Setup XSLT
            TransformerFactory factory = TransformerFactory.newInstance();
            Transformer transformer = factory.newTransformer(new StreamSource(xslt));

            //Setup input for XSLT transformation
            Source src = new StreamSource(new StringReader(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();
        }
	}
}
Aufruf:
Java:
    private File outDir = new File("out");
    private File xsltfile = new File("xml/xslt/style.xsl");
    private File pdffile = new File(outDir, "ResultObj2PDF.pdf");

			System.out.println(currentOffer.toXML());
			try{
			PDFGenerator.convertXML2PDF(currentOffer.toXML(), xsltfile, pdffile);
			}catch(Exception exc){
				System.err.println(exc.getMessage());
			}

getXML liefert (aus dem Beispiel von der Apache FOP Seite entwendet):
[xml]<name>Frank</name>[/xml]

die XSLDatei ist ebenso von der Seite übernommen:
[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:eek:utput method="xml" indent="yes"/>
<xsl:template match="/">
<fo:root>
<fo:layout-master-set>
<fo:simple-page-master master-name="A4-portrait"
page-height="29.7cm" page-width="21.0cm" margin="2cm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4-portrait">
<fo:flow flow-name="xsl-region-body">
<fo:block>
Hello, <xsl:value-of select="name"/>!
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
</xsl:stylesheet>[/xml]

Die PDF wird wie gesagt generiert, aber kann nicht geöffnet werden. Hat da jemand eine Idee?
 
S

SlaterB

Gast
Java:
public class PDFGenerator
{
    // private static FopFactory fopFactory = FopFactory.newInstance();

    public static void convertXML2PDF(String xml, File xslt, File pdf)
        throws IOException, FOPException, TransformerException
    {

        OutputStream out = new BufferedOutputStream(new FileOutputStream(pdf));

        try
        {
            // Setup XSLT
            TransformerFactory factory = TransformerFactory.newInstance();
            Transformer transformer = factory.newTransformer(new StreamSource(xslt));

            // Setup input for XSLT transformation
            Source src = new StreamSource(new StringReader(xml));


            Driver driver = new Driver();
            driver.setRenderer(Driver.RENDER_PDF);
            driver.setOutputStream(out);

            // Resulting SAX events (the generated FO) must be piped through to FOP
            Result res = new SAXResult(driver.getContentHandler());

            // Start XSLT transformation and FOP processing
            transformer.transform(src, res);
        }
        finally
        {
            out.close();
        }
    }

    public static void main(String[] args)
        throws Exception
    {
        String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
        xml += "<name>Frank</name>";
        convertXML2PDF(xml, new File("test.xsl"), new File("result.pdf"));

    }
}

in das XML vielleicht so ein XML-Tag, obwohl es nicht notwendig scheint,
in die Hauptmethode habe ich von meiner funktionierenden Version den Driver kopiert
-> funktioniert bei mir
 

Shaddow

Mitglied
Diesen Treiber gibt es bei mir nicht. Der Import, wenn ich ihn manuell einfüge, ist fehlerhaft. In welcher jar liegt der?
 

Shaddow

Mitglied
Also ich habe inzwischen meinen PDF Generator zum Laufen bekommen, lediglich das zusammenspiel von XML und XSL will noch nicht ganz funktionieren:

Java:
public class PDFGenerator 
{
	private static FopFactory fopFactory = FopFactory.newInstance();
    private static FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
	
    //public static void convertXML2PDF(File xml, File xslt, File pdf)
	public static void convertXML2PDF(String xml, File xslt, File pdf)
			throws IOException, FOPException, TransformerException 
	{

		// Step 2: Set up output stream.
		// Note: Using BufferedOutputStream for performance reasons (helpful with FileOutputStreams).
		OutputStream out = new BufferedOutputStream(new FileOutputStream(pdf));

		try {
			  // Step 3: Construct fop with desired output format
			  Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);

			  // Step 4: Setup JAXP using identity transformer
			  TransformerFactory factory = TransformerFactory.newInstance();
			 // Source src = new StreamSource(xslt);

			  Transformer transformer = factory.newTransformer(new StreamSource(xslt)); // identity transformer
			 // Source src = new StreamSource(new StringReader(xml));         
			  Source src = new StreamSource(new StringReader(xml));
			  // Step 5: Setup input and output for XSLT transformation 
			  // Setup input stream

			  // Resulting SAX events (the generated FO) must be piped through to FOP
			  Result res = new SAXResult(fop.getDefaultHandler());
			            
			  // Step 6: Start XSLT transformation and FOP processing
			  transformer.transform(src, res);

			} finally {
			  //Clean-up
			  out.close();
			}
	}
}
Der aufruf erfolg über:
Java:
PDFGenerator.convertXML2PDF(currentModel.toXML(), xsltfile, pdffile);

XSL:
[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:eek:utput method="xml" indent="yes"/>
<xsl:template match="/">
<fo:root>
<fo:layout-master-set>
<fo:simple-page-master master-name="A4-portrait"
page-height="29.7cm" page-width="21.0cm" margin="2cm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4-portrait">
<fo:flow flow-name="xsl-region-body">
<fo:block>
Angebots-Nummer: <xsl:value-of select="offerID"/>!
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
</xsl:stylesheet>[/xml]

und der Rückgabewert von currentModel.toXML()
[xml]
<offer>
<name>Frank</name>
<offerID>testid123</offerID>
</offer>[/xml]

Wenn ich nun das ganze ausführe entsteht eine PDF mit "Angebots-nummer: !"
Der select darin wird nicht ausgeführt, obwohl die ID existiert. Woran liegt das? Muss ich das irgendwie hierarchisch umsetzen, weil offerID in offer liegt?
 

hama

Mitglied
Hallo,
ich möchte XSL-Fo mit Java benutzen und dafür brauche ich das Import von der Klasse "Driver" zu benutzen. Ich habe alle dazugehörige Jar-Dateien runtergeladen und anscheint kann keine die Klasse "Driver" importieren!
import org.apache.fop.apps.Driver;

hier ist den Link von alle mögliche Jar Dateien, die ich verwendet habe und haben aber keinen Erfolg für die Klasse "Driver" geliefert!!

Driver - JAR Search Engine - findJAR.com

--------
Also, ich brauche im Programm z.B. ein Objekt des Drivers einzubauen:
Driver driver = new Driver();

Für eine posetive Antwort werde ich sehr dankbar :)
schöne Grüße,
Hama
 
S

SlaterB

Gast
welche Jars hast du denn gedownloaded, gib z.B. die Quellen an,
in fop-0.20.5 sollte es dabei sein, in höheren evtl. nicht mehr,
müßte man auch wie ein Zip öffen und alle enthaltenen Klassen nachschauen können

ob dein Programm danach noch kompiliert ist eine ganz andere Frage,
hängt von tausend komplizierten Befehlen hab, schonmal eine externe Library engebungen?
Entwicklungsumgebung oder Konsole,

mehr Infos/ Screenshots?
 
S

SlaterB

Gast
> was für Probleme!
statt
was für Probleme?

heißt, dass keine Frage mehr offen ist?

ansonsten siehe:
ob dein Programm danach noch kompiliert ist eine ganz andere Frage,
hängt von tausend komplizierten Befehlen hab, schonmal eine externe Library engebungen?
Entwicklungsumgebung oder Konsole,

mehr Infos/ Screenshots?
dass du Java6 verwendest ist ziemlich wenig Info,
du hast doch ein Programm, ein Kompilier-Kommando, Anzeige der Fehlermeldung,
irgendwo muss das Jar sein, wie ist das eingebunden/ konfiguriert
usw. usf.

viele Sätze schreiben oder viele Screenshots

gut nacht für heute
 

hama

Mitglied
Also, bis jetzt hatte ich nie solche Probleme bekommen...
Ich benutze eclipse und es zeigt Fehler wenn das Pacage der Klasse nicht richtig importiert ist.

danke!
 
S

SlaterB

Gast
dass du das Jar bei Eclipse-Projekten konfigurieren musst und ich nichts weiter machen kann bevor das nicht glaubhaft bewiesen ist, z.B. Screenshot, muss ich noch ein drittes Mal schreiben?

falls du nicht verstehst, worum es geht, wäre folgendes gefälliger formuliert:
'ich habe bisher folgendes Eclipse-Projekt, alles was ich zum Jar dort eingestellt habe ist: .. (evtl nichts außer Download),
was muss ich alles noch tun?'
das wäre zwar recht wenig Grundlage, aber zumindest muss ich dann nicht ständig nachfragen
 
Zuletzt bearbeitet von einem Moderator:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
8u3631984 Argument Captor liefert NULL zurück Allgemeine Java-Themen 2
DiekleineRatte77 Schlüsselworte ANSI Konverter liefert UTF-8 Allgemeine Java-Themen 7
Arif Math.cos liefert komische Werte Allgemeine Java-Themen 8
I HTML einer Website auslesen liefert nur head Allgemeine Java-Themen 6
A Datentypen Long.valueOf liefert kein "L" am Ende Allgemeine Java-Themen 3
T Variablenübergabe liefert immer null Allgemeine Java-Themen 13
C Object.equals() liefert falschen Wert? Allgemeine Java-Themen 14
Q GregorianCalendar Methode add liefert komische Werte Allgemeine Java-Themen 3
T Datentypen ArrayUtils.indexOf( ... ) liefert -1 obwohl Wert scheinbar enthalten ist Allgemeine Java-Themen 15
T SimpleDateFormat.parse() liefert falschen Tag Allgemeine Java-Themen 2
T java.uil.Random liefert negative Werte Allgemeine Java-Themen 2
I newInstance() liefert null zurück Allgemeine Java-Themen 4
Z new Date() liefert falsche Uhrzeit Allgemeine Java-Themen 12
S Newton-Verfahren liefert nur 1 Wert Allgemeine Java-Themen 3
J Liefert new URL(String) gecachte Webseiten? Allgemeine Java-Themen 15
S HashMap containsKey liefert immer false zurück Allgemeine Java-Themen 15
M Kugelschnittberechnung liefert falsche Werte Allgemeine Java-Themen 4
A md5 liefert unterschiedliche Testsummen? Allgemeine Java-Themen 4
S instanceof liefert true, aber cast funktioniert nicht! Allgemeine Java-Themen 6
MasterEvil File.createTempFile liefert nur kurzen Pfad mit Tilde Allgemeine Java-Themen 3
M BufferedReader.read(char[] cbuf) liefert falsche Werte? Allgemeine Java-Themen 4
N contains(.) liefert nicht erwartetes Ergebnis Allgemeine Java-Themen 3
H JNI: loadLibrary liefert UnsatisfiedLinkError Allgemeine Java-Themen 2
J Base64 Kodierung liefert korrupte Dateien Allgemeine Java-Themen 3
S ´Locale.getDefault() liefert en Allgemeine Java-Themen 10
C ImageIO die read-Methode liefert mir ein null- Wert zurück Allgemeine Java-Themen 10
S aFile.delete() liefert false - Gründe ? Allgemeine Java-Themen 2
Blender3D AWT Fehlerhafte Zeit bei Calender und Date DateFormat Allgemeine Java-Themen 8
A Fehlerhafte Nst Berechnung einer bestimmten Fkt. (Bisektion) Allgemeine Java-Themen 10
Z Fehlerhafte Schriftdarstellung in Java Allgemeine Java-Themen 4
D Fehlerhafte Thread Verwendung beim arbeiten mit Sockets Allgemeine Java-Themen 6
byte Fehlerhafte Bilder reparieren? Allgemeine Java-Themen 11
J JREx + Win2k + SP4 -> fehlerhafte GUI ? Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben