APIs d'export en PDF

Les étapes de création d'un document PDF

La création d'un fichier PDf avec la librairie FOP peut se faire de différentes façons, soit en éditant un fichier XML contenant les données ainsi qu'un fichier XSL-FO permettant de mettre en forme ces données, soit en éditant seulement le fichier XSL-FO avec les données. Bien entendu, la première solution est beaucoup plus satisfaisante. Nous allons donc voir comment réaliser un document PDF avec cette méthode.

I. Un fichier XML contenant les données

Voici un exemple de fichier XML contenant les données à insérer dans notre fichier PDF

<projectteam>
  <projectname>Hangtime</projectname>
  <member>
    <name>Séverine Aime</name>
    <function>Chef de projet</function>
    <email>saime@etudiant.univ-mlv.fr</email>
  </member>
  <member>
    <name>Cuellar Gregory</name>
    <function>Responsable développement</function>
    <email>gcuellar@etudiant.univ-mlv.fr</email>
  </member>
  <member>
    <name>Nicolas Chaveron</name>
    <function>Responsable qualité</function>
    <email>nchavero@etudiant.univ-mlv.fr</email>
  </member>
  <member>
    <name>Remy Lataix</name>
    <function>Responsable site web</function>
    <email>rlataix@etudiant.univ-mlv.fr</email>
  </member>
  <member>
    <name>Sébastien Guinchard</name>
    <function>Responsable Interface Graphique</function>
    < email>sguincha@etudiant.univ-mlv.fr</email>
  </member>
</projectteam>

A présent, il nous faut définir la mise en forme de notre document PDF à l'aide du fichier XSL-FO.

II. Un fichier de mise en forme XSL-FO

le fichier XSL-FO doit contenir l'en tete suivante:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo">
  <xsl:output method="xml" version="1.0" omit-xml-declaration="no" indent="yes"/>
  <!-- Appel du template: projectteam -->
  <xsl:template match="projectteam">
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
      <fo:layout-master-set>
        <fo:simple-page-master master-name="simpleA4" page-height="29.7cm" page-width="21cm" margin-top="2cm" margin-bottom="2cm" margin-left="2cm" margin-right="2cm">
          <fo:region-body/>
        </fo:simple-page-master>
      </fo:layout-master-set>
      <fo:page-sequence master-reference="simpleA4">
      <!-- Début d'ecriture dans le fichier -->
        <fo:flow flow-name="xsl-region-body">
          <fo:block font-size="16pt" font-weight="bold" space-after="5mm">Project: <xsl:value-of select="projectname"/>
          </fo:block>
          
          <fo:block font-size="10pt">
            
             <fo:table table-layout="fixed">
              <fo:table-column column-width="4cm"/>
              <fo:table-column column-width="8cm"/>
              <fo:table-column column-width="5cm"/>
              <fo:table-body>
                <xsl:apply-templates/>
              </fo:table-body>
            </fo:table>
          </fo:block>
          
        </fo:flow>
      </fo:page-sequence>
    </fo:root>
    
    
  </xsl:template>
  <!-- ========================= -->
  <!-- child element: member     -->
  <!-- ========================= -->
  <xsl:template match="member">
    <fo:table-row>
      <xsl:if test="function = 'lead'">
        <xsl:attribute name="font-weight">bold</xsl:attribute>
      </xsl:if>
      <fo:table-cell>
        <fo:block>
          <xsl:value-of select="name"/>
        </fo:block>
      </fo:table-cell>
      <fo:table-cell>
        <fo:block>
          <xsl:value-of select="function"/>
        </fo:block>
      </fo:table-cell>
      <fo:table-cell>
        <fo:block>
          <xsl:value-of select="email"/>
        </fo:block>
      </fo:table-cell>
    </fo:table-row>
  </xsl:template>
</xsl:stylesheet>


Ce fichier de mise en forme créer un tableau et renseigne chacun des champs de ce tableau par les informations contenues dans le fichier XML. Voici le résultat

Valid HTML 4.01!