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
Voila le code java
Mais ce code affiche le résultat suivant :
j'ouvrire le fichier FOPBF.tmp et je trouve le message suivant
Ma question: Comment modifier ce code pour récupérer le fichier pdf?
Merci.....
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.....