 fo to pdf converter.

 with fo (formating objects) it's quite easy to convert xml-documents into
  pdf-docs (and not only pdf, but also ps, pcl, txt and more)

 An introduction into formating objects can be found at
  http://www.w3.org/TR/xsl/slice6.html#fo-section
  http://www.ibiblio.org/xml/books/bible/updates/15.html
 A tutorial is here:
  http://www.xml.com/pub/a/2001/01/17/xsl-fo/
  http://www.xml.com/pub/a/2001/01/24/xsl-fo/
 A html_to_fo.xsl can also be found there
  http://www.xml.com/2001/01/24/xsl-fo/fop_article.tgz
  but it didn't work for my simple xhtml files..

 The way to use this class is, produce a fo-file from a xml-file with a
 xsl-stylesheet, then feed this class with this fo-file and you get a pdf
 back (either directly to the browser for really dynamic-pdf production or
 as a file on your filesystem)

 It is recommended to use the Cache-Classes from PEAR, if you want dynamic
 pdf production, since the process of making the pdfs takes some time. For
 an example of how to  use Cache and fo2pdf see below.

 Requirements:

- You need Fop (version 0.20.1 was used for testing) from the xml-apache 
   project (http://xml.apache.org/fop) and Java (1.1.x or later, i tested 
   it with 1.2.2 from sun on linux, see the Fop-Docs for details).
   
- Furthermore you have to compile your php with --with-java and to adjust
   your php.ini file. It can be a rather painful task to get java and php
   to work together. (i also tested this only with jdk 1.2.2, got 1.3.1 to work
   but not together with sablotron....)
   See http://www.phpbuilder.com/columns/marknold20001221.php3 or
   http://www.linuxwebdevnews.com/articles/php-java-xslt.php?pid=347 or
   http://www.onlamp.com/pub/a/php/2001/06/14/php_jav.html or
   http://php.chregu.tv/java-debian.html (some config tips)
   for more details about java and php.
   For your reference, my relevant parts in php.ini looks like this:
   ***
   extension=libphp_java.so
   extension.dir=/usr/local/lib/php/20010901/
   [java]
    java.class.path=/usr/local/lib/php/php_java.jar:/usr/local/share/java/fop.jar:/usr/local/share/java/batik.jar:/usr/share/java/xalan-2.0.1.jar:/usr/share/java/xerces.jar:/usr/local/share/java/jimi-1.0.jar
   java.library=/usr/lib/java/jre/lib/i386/libjava.so
   ***


- If you want to include images or svg-files, then FOP needs an XServer (this is a
    limitation of the graphics-support in java. See 
    http://www.geocities.com/marcoschmidt.geo/java-image-coding.html
    for details). Normally webservers don't have Xservers installed, but I made 
    some good experiences with Xfvb.

 Usage:
    require_once("XML/fo2pdf.php");
    //make a pdf from simple.fo and save the pdf in a tmp-folder
    $fop = new xml_fo2pdf();
    // the following 2 lines are the default settins, so not
    // necessary here, but you can set it to other values        
    $fop->setRenderer("pdf");
    $fop->setContentType("application/pdf");
    //If you want other fonts in your PDF, you need to declare them in a
    // config file. Declare here the path to this file [optional]. 
    // More information about fonts and fop on the apache-fop webpage.
    $fop->setConfigFile("userconfig.xml");    
     if (PEAR::isError($error = $fop->run("simple.fo")))
     {
      die("FOP ERROR: ". $error->getMessage());
     }
    //print pdf to the outputbuffer,
    // including correct Header ("Content-type: application/pdf")
    $fop->printPDF();
    //delete the temporary pdf file
    $fop->deletePDF();

   With Cache:
    require_once("XML/fo2pdf.php");
    require_once("Cache/Output.php");
    $container = "file";
    $options = array("cache_dir"=>"/tmp/");
    $cache = new Cache_Output("$container",$options);
    $cache_handle = $cache->generateID($REQUEST_URI);
    if ($content = $cache->start($cache_handle)) {
      Header("Content-type: application/pdf");
      print $content;
      die();
    }
    $fop = new xml_fo2pdf();
    $fop->run("simple.fo");
    $fop->printPDF();
    $fop->deletePDF();
    print $cache->end("+30");

