6 kwietnia 2011

Apache FOP na Apache Tomcat cz.3

Ta ścieżka została, odrzucona. Dlaczego? Nie wiem jak podpiąć plik konfiguracyjny. Edycja a później kompilacja nowego servleta nie wchodzi w grę. A potrzebuję własnego pliku konfiguracyjnego aby wrzucić fonty z polskimi znakami. Bez tego ani rusz. Walki skończyły się na tym, że zrobiłem najprostszego wrappera w PHP, generuję plik .fo, zapisuję w tempie, wywołuję bezpośrednio skrypt fop ze ścieżką do zmodyfikowanego pliku konfiguracyjnego i wypluwam do przeglądarki zawartość wygenerowanego pliku PDF. Wrapper wygląda następująco:
<?php
$fo_tmp = tempnam("/tmp", "fop_fo_");
$pdf_tmp = tempnam("/tmp", "fop_pdf_");

$fo = '<?xml version="1.0" encoding="utf-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <fo:layout-master-set>
    <fo:simple-page-master master-name="first" 
                           page-height="29.7cm" 
                           page-width="21cm"
                           margin-top="1cm"
                           margin-bottom="2cm"
                           margin-left="1cm"
                           margin-right="1cm">
      <fo:region-body margin-top=".5cm"/>
      <fo:region-before extent="0cm"/>
      <fo:region-after extent="0cm"/>
    </fo:simple-page-master>
  </fo:layout-master-set>
  <fo:page-sequence master-reference="first">
    <fo:flow flow-name="xsl-region-body">
      <fo:block">Hello World!</fo:block>
    </fo:flow>
  </fo:page-sequence>
</fo:root>';

file_put_contents($fo_tmp,$fo);
system("/home/tools/fop/fop -c /home/tools/fop/userconf.xml $fo_tmp $pdf_tmp");

$lastmodified = gmdate('D, d M Y H:i:s \G\M\T',time());
header("Content-Type: application/pdf");
header("Last-Modified: $lastmodified");
$pdf = @file_get_contents($pdf_tmp);
header("Content-Lenght: ".strlen($pdf));
header("Content-Length: ".strlen($pdf));
echo $pdf;
@unlink($fo_tmp);
@unlink($pdf_tmp);
exit;
?>
Należy pamiętać o odpowiedniej modyfikacji ścieżek. Po delikatnych modyfikacjach, możemy dostosować ten wrapper do konwersji plików xml+xslt.

Brak komentarzy: