IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

XSL/XSLT/XPATH XML Discussion :

[PHP][XSL] Transformation d'un fichier xml en pdf avec xsl~fo , xslt , php


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 31
    Points
    31
    Par défaut [PHP][XSL] Transformation d'un fichier xml en pdf avec xsl~fo , xslt , php
    Salut,
    Je veux faire une application php qui génère des documents xml.
    A partir de ces documents xml, j'utilise xsl pour créer des documents xsl:fo.
    A partir de ces documents xsl:fo, j'utilise fop pour générer du pdf .
    Comment installer l'apache Fop avec EasyPhp?
    Pouvez vous m'aider par un exemple


    Je vous remercie beaucoup,

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 31
    Points
    31
    Par défaut Je transforme le code php à version 4.3
    Merci valal
    Je transforme le code php à version 4.3
    voilâ le code php
    <?php

    function FOP(&$xml, &$xsl)
    {
    $this->xml = &$xml;
    $this->xsl = &$xsl;

    $fopcfg = dirname(__file__).'/fop_config.xml';
    $tmppdf = tempnam('/tmp', 'FOP');

    if(!extension_loaded('java')) {
    $tmpxml = tempnam('/tmp', 'FOP');
    $tmpxsl = tempnam('/tmp', 'FOP');
    file_put_contents($tmpxml, $this->xml);
    file_put_contents($tmpxsl, $this->xsl);

    exec("fop -c {$fopcfg} -xml {$tmpxml} -xsl {$tmpxsl} -pdf {$tmppdf} 2>&1");

    @unlink($tmpxml);
    @unlink($tmpxsl);
    } else {

    $xh = xslt_create();
    $file=fopen("C:\Program Files\EasyPHP1-8\www\logement\fop-0.20.5\build\fop\CinemaFO.xml","r");
    $xml=fread($file,50000);
    fclose($file);

    $file=fopen("C:\Program Files\EasyPHP1-8\www\logement\fop-0.20.5\build\fop\CinemaFO.xsl","r");
    $xsl=fread($file,50000);
    fclose($file);

    $arguments = array(
    '/_xml' => $xml,
    '/_xsl' => $xsl
    );

    $result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);

    $j_fwc = new Java("FOPWrapper");
    $j_fw = $j_fwc->getInstance($fopcfg);
    $j_fw->run($result , $tmppdf);

    }
    return($tmppdf);
    }

    ?>

    <?php
    $xml = file_get_contents("C:\Program Files\EasyPHP1-8\www\logement\fop-0.20.5\build\fop\logement.xml");
    $xsl = file_get_contents("C:\Program Files\EasyPHP1-8\www\logement\fop-0.20.5\build\fop\pdf.xsl");


    $pdf_filename =FOP($xml, $xsl);
    echo $pdf_filename;

    ?>
    et je ne modifie pas le code java
    code java
    import org.apache.fop.apps.Driver;
    import org.apache.fop.apps.Options;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.StringReader;
    import org.xml.sax.InputSource;

    public class FOPWrapper {
    private static FOPWrapper _wrapper = null;
    private Driver _driver = null;
    private Options _options = null;

    private FOPWrapper(String config_file) throws Exception {
    this._options = new Options(new File(config_file));
    this._driver = new Driver();
    this._driver.setRenderer(Driver.RENDER_PDF);
    System.out.println("FOP Initialized...");
    }

    public static FOPWrapper getInstance(String config_file) throws Exception {
    if(FOPWrapper._wrapper == null) FOPWrapper._wrapper = new FOPWrapper(config_file);
    return FOPWrapper._wrapper;
    }

    public void run(String xml_input, String output_file) throws Exception {
    this._driver.setInputSource(new InputSource(new StringReader(xml_input)));
    this._driver.setOutputStream(new FileOutputStream(output_file));
    this._driver.run();
    }
    }

    Mais ce code affiche le résultat suivant :
    C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\FOPBF.tmp
    j'ouvrire le fichier FOPBF.tmp et je trouve le message suivant
    %PDF-1.3
    %ª«¬*
    4 0 obj
    << /Type /Info
    /Producer (FOP 0.20.5) >>
    endobj
    5 0 obj
    << /Length 86 /Filter /FlateDecode
    >>
    stream
    xœs
    áÒw3T04Ò3PIã2 QÉ\
    é\†
    @h¨`j*g¢`nl¨gna¢’«*á‘š““¯©*kdnT®ž_”“¢©«âÅå Ãø
    endstream
    endobj
    6 0 obj
    << /Type /Page
    /Parent 1 0 R
    /MediaBox [ 0 0 612 792 ]
    /Resources 3 0 R
    /Contents 5 0 R
    >>
    endobj
    7 0 obj
    << /Type /Font
    /Subtype /Type1
    /Name /F1
    /BaseFont /Helvetica
    /Encoding /WinAnsiEncoding >>
    endobj
    1 0 obj
    << /Type /Pages
    /Count 1
    /Kids [6 0 R ] >>
    endobj
    2 0 obj
    << /Type /Catalog
    /Pages 1 0 R
    >>
    endobj
    3 0 obj
    <<
    /Font << /F1 7 0 R >>
    /ProcSet [ /PDF /ImageC /Text ] >>
    endobj
    xref
    0 8
    0000000000 65535 f
    0000000442 00000 n
    0000000500 00000 n
    0000000550 00000 n
    0000000015 00000 n
    0000000071 00000 n
    0000000229 00000 n
    0000000335 00000 n
    trailer
    <<
    /Size 8
    /Root 2 0 R
    /Info 4 0 R
    >>
    startxref
    628
    %%EOF
    Ma question: Comment modifier ce code pour trouver une bonne resultat?
    Merci.....

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    A premiere vu le code genere est du PDF, il n'y a aucun autre traitement a réaliser.
    Il suffit de renommer FOPBF.tmp en FOPBF.pdf pour pouvoir l'ouvrir aver un viewer adequate.
    Cela dit peut etre faut-il ajouter d'autres instructions en PHP pour que le navigateur l'ouvre avec Acrobat. (Je ne connais pas tres bien le PHP)

    J'espere que cela va t'aider.
    N'hesite pas a me contacter si tu as d'autres questions auquelles je peux repondre.
    A+

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 31
    Points
    31
    Par défaut Remerciement
    troisj dit:
    N'hesite pas a me contacter si tu as d'autres questions auquelles je peux repondre.
    abdallah2007 :Merci beaucoup pour votre avantage

    troisj dit:
    Il suffit de renommer FOPBF.tmp en FOPBF.pdf pour pouvoir l'ouvrir aver un viewer adequate.
    abdallah2007: Votre solution est efficace pour mon problème.Le fichier pdf est marche,mais il reste un petit problème d'affichage. Je pose ce problème dans un nouveau discussion

  6. #6
    Membre du Club
    Profil pro
    dbadmin et dev web magento
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dbadmin et dev web magento

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Points : 56
    Points
    56
    Par défaut
    y aurait-il un moyen de générer le pdf à partir du xsl-fo sous php sans utiliser du java (et surtout la fonction exec() ) ?

    la librairy fpdf permet de générer des pdf sans extensions php, personne n'a entendu parlé par hazard d'une implémentation avec xsl-fo ?

  7. #7
    Membre éprouvé
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Points : 1 063
    Points
    1 063
    Par défaut
    j'utilise pas mal fpdf mais je n'ai jamais entendu d'extension fop (je pense que cela n'existe tout simplement pas)
    Par contre il est simple à partir d'un fichier html de générer via fpdf un foichier pdf (cherche sur google html2pdf fpdf)

  8. #8
    Membre du Club
    Profil pro
    dbadmin et dev web magento
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dbadmin et dev web magento

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Points : 56
    Points
    56
    Par défaut
    oui j'ai vu qu'il y a beaucoup d'outils pour passer du html au pdf mais aucun pour passer de xsl-fo à pdf alors que le format est fais pour ça...

    tanpis je vais faire du html alors...

Discussions similaires

  1. Transformation d'un fichier XML/XSL
    Par moi95 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 05/02/2007, 15h46
  2. [XML] [PHP] Difficultés pour lire un fichier XML
    Par moutyk dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 30/11/2006, 13h14
  3. [XML] [PHP-Flash] écrire dans un fichier XML via un fichier PHP
    Par morgiane dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 24/11/2006, 12h05
  4. Réponses: 3
    Dernier message: 17/07/2006, 08h29
  5. Insertion dans un fichier xml à partir d'un xsl
    Par alexandre54 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 21/03/2003, 09h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo