Rechercher : dans
Par :

[PHP][XSL] Transformation XML en PDF

midoo2007, le 19 mai 2007 à 13:45:11 
 Signaler ce message aux modérateurs

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 .
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;



?>


Voila le 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 récupérer le fichier pdf?
Merci.....
Configuration: Windows XP
Firefox 2.0.0.3

Meilleures réponses pour « [PHP][XSL] Transformation XML en PDF » dans :
PHP - Parser du XML Voir Introduction à XML PHP permet l'analyse syntaxique (parsage ou parsing en anglais) d'un document XML. Le langage XML (eXtensible Markup Language, traduisez Langage à balises extensibles) est un métalangage, c'est-à-dire un langage permettant de...
Transformer un fichier Word (.doc) en PDF VoirTransformer en fichier PDF un fichier Microsoft Word (.doc) Rien de plus simple ! Ouvrez votre fichier *.doc avec OpenOffice.org Réglez éventuellement la mise en page par le menu Format / Page... Dès lors, 2 solutions pour transformer...
Télécharger Free PDF to Word Converter VoirLes documents PDF sont certes les plus sur et les plus stables pour les transferts, puisqu'ils ne peuvent pas être modifiés. Néanmoins, parfois on a besoin des données contenues dans un document PDF que l'on voudrait éditer ou modifier. Free PDF to...
Mise en page de XML avec XSL VoirIntroduction à XSL XML est un langage de structuration des données, et non de représentation des données. Ainsi XSL (eXtensible StyleSheet Language) est un langage recommandé par le W3C pour effectuer la représentation des données de documents XML....
Transformations de XML avec XSLT VoirXSLT et XSL/FO XSL (eXtensible Stylesheet Language) possède deux composantes : XSLT, eXtensible Stylesheet Transformation XSL/FO, eXtensible Stylesheet formatting le langage de transformation des données (XSLT, eXtensible Stylesheet...