Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

[FOP] Problème de path avec la génération d'un PDF


Sujet :

API standards et tierces Java

  1. #1
    Membre du Club
    [FOP] Problème de path avec la génération d'un PDF
    Bonjour à tous !

    Je cherche à générer un fichier PDF à partir d'un XML et d'un XSL-FO. Dans un premier temps, j'ai ecrit mon xsl sous XML Spy. Pour centraliser mes templates, j'ai créé un autre xsl appelé common.xsl et je l'ai mis dans un dossier common.

    J'ai donc le debut de mon xsl qui ressemble à ca :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:fox="http://xml.apache.org/fop/extensions">
    	<xsl:import href="common/common.xsl"/>


    Le problème vient du fait que maintenant je veux générer mon pdf en java et non plus avec xml Spy. Du coup j'ai créé la méthode suivante :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     private static void convertXml2Pdf(InputStream xml, InputStream xslt, File pdf)
                                    throws IOException, TransformerException
        {
            // Construct driver
            Driver driver = new Driver();
     
            //      Setup logger
            Logger logger = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);
            driver.setLogger(logger);
            MessageHandler.setScreenLogger(logger);
     
            // Setup Renderer (output format)
            driver.setRenderer(Driver.RENDER_PDF);
     
            // Setup output
            OutputStream out = new FileOutputStream(pdf);
     
            try
            {
                driver.setOutputStream(out);
     
                // Setup XSLT
                TransformerFactory factory = TransformerFactory.newInstance();
                Transformer transformer = factory.newTransformer(new StreamSource(xslt));
     
                // Setup input for XSLT transformation
                Source src = new StreamSource(xml);
     
                // 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();
            }
        }


    Cette méthode se situe dans une classe CTest qui est dans le package com.test.xslfo. Dans ce package se trouve également un dossier xsl, dans lequel j'ai mis mon xslfo, ainsi que le repertoire common qui contient common.xsl. Vous suivez ?? non ?? Bon voila l'arborescence:

    \org\test\xslfo
    |
    |_ \xsl
    | |_ \common
    | | |_comon.xsl
    | |
    | |_monxsl.xsl
    |
    |_CTest.java


    Donc mon problème vient du fait que lorsque je veux générer mon PDF, fop me lance une exception en me disant qu'il ne peut pas trouver common.xsl. En fait il ne le cherche pas dans le repertoire org.test.xslfo.xsl.common mais dans le repertoire common tout court.

    Ma question est la suivante, est ce qu'il est possible de forcer le repertoire de travail de FOP pour lui dire de travailler dans le repertoire que je veux ??

    En esperant avoir été clair

    Merci d'avance...

  2. #2
    Membre du Club
    Bon pour simplifier, je voudrais juste dire à FOP tu me créé mon Pdf en te mettant dans le repertoire du XSL.

  3. #3
    Nouveau membre du Club
    si c le chemin qui pose pb, pourquoi tu ne met pas tt en attendant que tu trouve une solution plus propre?

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
     <xsl:import href="org/test/xslfo/xsl/common/common.xsl"/>

  4. #4
    Membre du Club
    C ce que j'ai fait, mais j'ai pas mal de xsl, j'aurais voulu trouver un moyen qui m'eviterai d'en modifier 25 si je devais les changer des repertoires plus tard.

    Merci !

###raw>template_hook.ano_emploi###