Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: GentooForum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

13.08.2008, 13:52

fop mehr Speicher geben

Moin,

ich habe ein Problem mit dem Formating Objects Processor. Ich möche ein DocBook-Dokument, in dem einige größere Grafiken (24cm hoch bei ca. 150 DPI, also ca. 3000px hoch) in PDF umwandeln. Das umwandeln von DocBook nach XSL-FO mittels Xalan klappt. Aber von XSL-FO nach PDF steigt der FOP aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at java.awt.image.BufferedImage.getRGB(BufferedImage.java:935)
	at org.apache.fop.image.ImageIOImage.loadBitmap(ImageIOImage.java:131)
	at org.apache.fop.image.ImageIOImage.loadDimensions(ImageIOImage.java:68)
	at org.apache.fop.image.AbstractFopImage.load(AbstractFopImage.java:161)
	at org.apache.fop.fo.flow.ExternalGraphic.bind(ExternalGraphic.java:75)
	at org.apache.fop.fo.FObj.processNode(FObj.java:125)
	at org.apache.fop.fo.FOTreeBuilder$MainFOHandler.startElement(FOTreeBuilder.java:320)
	at org.apache.fop.fo.FOTreeBuilder.startElement(FOTreeBuilder.java:185)
	at org.apache.xalan.transformer.TransformerIdentityImpl.startElement(TransformerIdentityImpl.java:1072)
	at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
	at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
	at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
	at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
	at org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:484)
	at org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:165)
	at org.apache.fop.cli.InputHandler.renderTo(InputHandler.java:115)
	at org.apache.fop.cli.Main.startFOP(Main.java:166)
	at org.apache.fop.cli.Main.main(Main.java:197)


Das Problem scheint zu sein, dass der FOP zu wenig Speicher hat. Leider finde ich nicht heraus wie ich der JVM, die den FOP ausführt, mehr Speicher zuweisen kann...

Gruß

Stareagle

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »stareagle« (14.08.2008, 10:53)


2

14.08.2008, 11:04

Moin,

so, nachdem ich mir noch mal genau angesehen habe, was so passiert wenn fop gestartet wird konnte ich es jetzt lösen. Bin mir zwar nicht sicher,
ob das der offizielle Weg ist (in den Dokus hab ich nichts gefunden). Ich vermute mal das gilt so auch für andere Java-Programme unter Gentoo. Hier meine Lösung am Beispiel von fop:

Das Kommando fop ist nur ein Bash-Script und liegt unter /usr/bin:

Quellcode

1
2
3
4
#!/bin/bash
gjl_package=fop
gjl_main="org.apache.fop.cli.Main"
source /usr/share/java-config-2/launcher/launcher.bash


Die eigentliche Arbeit macht der launcher. Wenn man fop mit

Quellcode

1
GJL_DEBUG=1 fop -fo beispiel.fo -pdf beispiel.pdf


startet, gibt es ein paar Debug-Ausgaben, dann sieht ein wenig von dem, was der Launcher macht. GJL steht vermutlich für Gentoo Java Launcher?

Wenn man sich den Code des Launchers ansieht (ist auch ein Bashscript), findet man am Anfang folgendes:

Quellcode

1
2
3
4
5
6
7
8
9
# Source package env
# ---------------------
gjl_user_env="${HOME}/.gentoo/java-config-2/launcher.d/${gjl_package}"
gjl_system_env="/etc/java-config-2/launcher.d/${gjl_package}"
if [[ -f "${gjl_user_env}" ]]; then
    	source "${gjl_user_env}"
elif [[ -f "${gjl_system_env}" ]]; then
    	source "${gjl_system_env}"
fi


Hier werden, sofern vorhanden, zwei Dateien ausgewertet, eine systemweit gültige und eine benutzerspezifische. Bei mir existiert keines der beiden Verzeichnisse.

Weiter unten im Code des Launchers ist folgende Zeile zu finden:

Quellcode

1
exec java ${gjl_args} ${gjl_java_args} ${gjl_starte} ${gjl_pkg_args} "${@}"


Wenn man nun eine Datei in einem der launcher.d-Verzeichnisse (die man unter Umständen noch anlegen muss) mit dem Namen des Packetes (hier fop) angelegt, und dort folgendes reinschreibt:

Quellcode

1
exec java ${gjl_args} ${gjl_java_args} ${gjl_starte} ${gjl_pkg_args} "${@}"


wird das wie gewünscht als Option an die JVM übergeben.

Gruß

Stareagle