FOP: comment spécifier l'image src chemin relatif?

C'est ma première question ici, j'espère que je suis en train de faire. Désolé pour mon mauvais anglais à l'avance 🙂

Je suis en utilisant JSF 2.0 (Eclipse IDE) et je suis en train de générer des fichiers PDF à l'aide d'Apache FOP 1.0.

J'ai été en mesure de faire de simples fichiers PDF à l'aide des instructions sur la Apache Fop site , mais je ne peux pas insérer une image à partir de mon dossier de l'application. Ma structure de dossier comme ceci:
Dans mon application WebContent j'ai (entre autre)
pdf_transform/xslt/transformFile.xsl, et
pdf_transform/xslt/logo.jpg

Dans transformFile.xsl j'ai

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

mais quand je clik 'showPDF" dans ma servlet, j'obtiens le fichier PDF sans image (tout est là), et ce message dans la console:

SÉVÈRE: La Source qui a été renvoyé
à partir de l'URI de la résolution ne contient pas une
InputStream pour URI: logo.jpg Nov 18,
2010 5:16:49 PM
org.apache.fop.les événements.LoggingEventListener
processEvent GRAVE: l'Image ne se trouve pas.
URI: logo.jpg. (Pas de contexte info
disponibles)

J'ai essayé d'utiliser "logo.jpg' au lieu de l'url('logo.jpg'), de mettre des image sur les différents endroits à l'intérieur de WebContent dossier et à l'aide de différents navigation("./logo.jpg") mais ça n'a pas fonctionné.

Il fonctionne très bien si je l'ai mis chemin d'accès absolu (par exemple "d:/fop/images/logo.jpg") mais j'ai besoin de resurces dans mon application.

Lors de la recherche, j'ai trouvé que cela est lié à fopFactory.setURIResolver() et/ou client.setBaseURL(). Essayé quelque chose, mais il n'a pas réussir.

Je suis nouveau à la fois de l'ACI et de la FOP, et cette image de la situation a été me tracasse depuis un certain temps. Quelqu'un peut-il m'aider, ou au moins me diriger vers un tutoriel sur "comment configurer FOP pour le chemin d'accès relatif"?

EDIT: je ne veux pas de chemins absolus et application devrait fonctionner indépendamment de son emplacement sur l'ordinateur (pour être publiable). Ma recherche me dit qu'il a quelque chose à voir avec la configuration de la FOP, mais je ne sais pas comment le faire 🙂

Merci d'avance.

P. S. C'est une méthode qui est appelée pour afficher le 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();
}

OriginalL'auteur Nikola | 2010-11-18