Hallo,
hier der java code dazu: Es soll ein pdf generiert werden, das auf Platte gespeichert wird, diese soll danach direkt im Browser angezeigt werden. Anscheinend wird die outofmemory exception nach dem Generieren geworfen, denn die Datei ist vorhanden. Aber wenn ich sie dann explizit durch Doppelklick öffnen möchte, dann wird gesagt, die Datei sei kaputt und könnte nicht repariert werden.
Wie groß ist denn die erstellte Datei?
Dass der PDF-Reader meckert, deutet darauf hin, dass während der Transformation etwas schiefgegangen ist. Ich habe dein XSLT jetzt nicht überprüft.
Es muss jedenfalls irgendwo ein Logfile geben in dem die Fehlermeldungen vom FOP geschreiben werden (oder du muss halt in der Konsole schauen was FOP während der Transformation da hineinschreibt)
Hier der Code, den ich verwende, jetzt schnell auf das Wesentliche gekürzt, (also kann sein, dass ich wo zu viel gelöscht habe).
(den ClassLoader brauche ich, weil ich die config.xml und die XSL(s) aus einem/dem Jar-File lade)
public class XML2PDF {
public static void createPDF(String[] args) {
try {
ClassLoader cl = XML2PDF.class.getClassLoader();
DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder();
Configuration cfg = cfgBuilder.build(cl.getResourceAsStream(args[0]));
File xmlfile = new File(args[1]);
File xsltfile = new File(args[2]);
File pdffile = new File(args[3]);
FopFactory fopFactory = FopFactory.newInstance();
fopFactory.setUserConfig(cfg);
FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
OutputStream out = new java.io.FileOutputStream(pdffile);
out = new java.io.BufferedOutputStream(out);
try {
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(new StreamSource(cl.getResourceAsStream(args[2])));
src = new StreamSource(xmlfile);
Result res = new SAXResult(fop.getDefaultHandler());
transformer.transform(src, res);
} finally {
out.close();
}
} catch (Exception e) {
e.printStackTrace(System.err);
}
}
}
Grüße
Thomas