FOP: wie Sie angeben-image src relativen Pfad?

Dies ist meine erste Frage hier, ich hoffe ich mache es richtig. Sorry für mein schlechtes Englisch, im Voraus 🙂

Ich bin mit JSF 2.0 (Eclipse-IDE), und ich versuche, zu erzeugen von PDF-Dateien mit Apache FOP 1.0.

War ich in der Lage, einfache PDF-Dateien mit dem Anweisungen auf Apache Fop Website , aber ich kann nicht legen Sie ein beliebiges Bild aus meinem Programm-Ordner. Meine Ordner Struktur ist so:
In meiner Anwendung WebContent habe ich (unter anderem)
pdf_transform/xslt/transformFile.xsl und
pdf_transform/xslt/logo.jpg

In transformFile.xsl-ich habe

<fo:block><fo:external-graphic src="url('logo.jpg')"/></fo:block>

aber wenn ich clik 'showPDF" - button in meinem servlet, bekomme ich die PDF-Datei, ohne Bild, (alles was es sonst noch gibt), und diese Meldungen in der Konsole:

SCHWERER: Die Quelle, die zurückgegeben wurde
von URI Auflösung nicht enthalten, eine
InputStream für URI: logo.jpg Nov 18,
2010 5:16:49 PM
org.apache.fop.Veranstaltungen.LoggingEventListener
processEvent SCHWERER: Bild nicht gefunden.
URI: logo.jpg. (Keine Kontext-info
verfügbar)

Ich versuchte, verwenden 'logo.jpg" anstelle von url('logo.jpg'), putting Bild an verschiedenen stellen im WebContent-Ordner und mit verschiedenen Navigations - ("./logo.jpg") aber es hat nicht funktioniert.

Funktioniert es einwandfrei, wenn ich den absoluten Pfad (z.B. "d:/fop/images/logo.jpg") aber ich brauche Findmittel whitin meine Anwendung.

Während der Suche habe ich gefunden, dass dieses mit fopFactory.setURIResolver() und/oder userAgent.setBaseURL(). Versucht etwas, aber nicht erfolgreich.

Ich bin neu sowohl JSF und FOP, und dieses Bild die situation wurde stört mich schon eine ganze Weile. Kann mir jemand helfen mit diesem, oder zumindest mir einige Tutorials auf "konfigurieren FOP für relativen Pfad verwenden"?

EDIT: ich will keine absoluten Pfade und die app sollte unabhängig von seiner Lage auf dem computer (wird publiziert). Meine Suche sagt mir, es hat etwas zu tun mit der Konfiguration von FOP, aber ich weiß nicht, wie es zu tun 🙂

Vielen Dank im Voraus.

P. S. Dies ist die Methode, die aufgerufen wird, für die Anzeige von PDF:

public void printExchangeRateList(ActionEvent event) {

    BufferedOutputStream output = null;

    FacesContext facesContext = FacesContext.getCurrentInstance();
    ExternalContext externalContext = facesContext.getExternalContext();
    HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();  

    String path = externalContext.getRealPath("/");


    try {

        response.reset();
        response.setHeader("Content-Type", "application/pdf");
        output = new BufferedOutputStream(response.getOutputStream(), 10240);

        File xsltfile = new File(path+"/pdf_transform/xslt/transformFile.xsl");

        FopFactory fopFactory = FopFactory.newInstance();
        FOUserAgent foUserAgent = fopFactory.newFOUserAgent();

        try {
            Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, output);

            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer(new StreamSource(xsltfile));

            Source src = new DOMSource(makeXML()); //my method
            Result res = new SAXResult(fop.getDefaultHandler());

            transformer.transform(src, res);


        } finally {
            if (output != null) output.close();
            /*try {
                out.close();
            } catch (IOException e) {
                //TODO Auto-generated catch block
                e.printStackTrace();
            }*/
        }

    } catch (Exception e) {
        //TODO Auto-generated catch block
    }

    facesContext.responseComplete();
}
InformationsquelleAutor Nikola | 2010-11-18
Schreibe einen Kommentar