Créer un PDF à partir d'un XML

shark59112 Messages postés 7 Date d'inscription jeudi 17 décembre 2009 Statut Membre Dernière intervention 22 décembre 2009 - 19 déc. 2009 à 18:28
kindingjoel Messages postés 1 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 7 juin 2010 - 7 juin 2010 à 13:08
Bonjour,

Je souhaite créer un .PDF à partir d'un fichier XML mais je ne sais pas du tout comment m'y prendre... =x (projet)
J'ai alors effectué des recherches intensive sur le net où j'ai pu dénicher pas mal d'information (fop, xsl, xsl:fo, etc...) mais aucun tutoriel partant de A à Z.

Pour commencer, voici mon fichier .xml de base -->

<?xml version="1.0" encoding="UTF-8"?>
<rss version="0.91">
  <channel>
    <title>Sauvons les Flux!!</title>
    <link>site/index.html</link>
    <description>Notre Site!!</description>
    <language>fr</language>
    
      <title>test1</title>
      <link>flux/test1.rss</link>
      <description>internet/test1.rss</description>
    
    
      <title>test2</title>
      <link>flux/test2.rss</link>
      <description>internet/test2.rss</description>
    
    
      <title>test3</title>
      <link>flux/test3.rss</link>
      <description>internet/test3.rss</description>
    
  </channel>
</rss>


Après beaucoup de recherche, j'ai lu qu'il fallait créer un xsl pour mettre en forme le xml j'ai donc codé ceci en regardant sur le net -->

<?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"
  version="1.0" >
<!-- rule for the whole document: root element is page -->
<xsl:template match="channel">
 <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <fo:layout-master-set>
  <!-- Definition of a single master page. It is simple (no headers etc.) -->
  <fo:simple-page-master
          master-name="first"
          margin-left="2cm" margin-right="2cm"
          margin-bottom="0.5cm" margin-top="0.75cm"
          page-width="21cm" page-height="29.7cm"
          >
   <!-- required element body -->
   <fo:region-body />
  </fo:simple-page-master>
 </fo:layout-master-set>
 <!-- Definition of a page sequence -->
 <fo:page-sequence master-reference="first">
  <fo:flow flow-name="xsl-region-body" font-size="14pt" line-height="14pt">
    <xsl:apply-templates/>
  </fo:flow>
 </fo:page-sequence>
</fo:root>
</xsl:template>
<!-- A series of XSLT rules that produce fo:blocks to be inserted above -->
 <xsl:template match="channel/title">
    <fo:block font-size="36pt" text-align="center" line-height="40pt" space-
before="0.5cm" space-after="1.0cm">
    <xsl:apply-templates/></fo:block>
  </xsl:template>
 <xsl:template match="link">
    <fo:block text-align="justify" space-before="0.5cm">
    <xsl:apply-templates/></fo:block>
  </xsl:template>
 <xsl:template match="description">
    <fo:block font-size="12pt" text-align="start" space-before="0.7cm" font-
style="italic">
    <xsl:apply-templates/></fo:block>
  </xsl:template>
</xsl:stylesheet>



Tout d'abord je voudrais savoir si m'ont .xsl est "bon", car je ne sais absolument pas comment je peux tester cela! =x


Sinon, d'après ce que j'ai compris, depuis ces 2 fichier, il faut que j'établis un xsl:fo à partir de ces 2 fichiers en utilisant FOP, est-exact? Si c'est le cas, je ne vois pas du tout comment m'y prendre donc si vous pouviez m'aider cela m'aiderais vraiment beaucoup beaucoup!!!

3 réponses

shark59112 Messages postés 7 Date d'inscription jeudi 17 décembre 2009 Statut Membre Dernière intervention 22 décembre 2009
19 déc. 2009 à 18:29
petit soucis pour le .xsl on dirait...
revoici le source:

<?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"
  version="1.0" >
<!-- rule for the whole document: root element is page -->
<xsl:template match="channel">
 <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <fo:layout-master-set>
  <!-- Definition of a single master page. It is simple (no headers etc.) -->
  <fo:simple-page-master
          master-name="first"
          margin-left="2cm" margin-right="2cm"
          margin-bottom="0.5cm" margin-top="0.75cm"
          page-width="21cm" page-height="29.7cm"
          >
   <!-- required element body -->
   <fo:region-body />
  </fo:simple-page-master>
 </fo:layout-master-set>
 <!-- Definition of a page sequence -->
 <fo:page-sequence master-reference="first">
  <fo:flow flow-name="xsl-region-body" font-size="14pt" line-height="14pt">
    <xsl:apply-templates/>
  </fo:flow>
 </fo:page-sequence>
</fo:root>
</xsl:template>
<!-- A series of XSLT rules that produce fo:blocks to be inserted above -->
 <xsl:template match="channel/title">
    <fo:block font-size="36pt" text-align="center" line-height="40pt" space-
before="0.5cm" space-after="1.0cm">
    <xsl:apply-templates/></fo:block>
  </xsl:template>
 <xsl:template match="link">
    <fo:block text-align="justify" space-before="0.5cm">
    <xsl:apply-templates/></fo:block>
  </xsl:template>
 <xsl:template match="description">
    <fo:block font-size="12pt" text-align="start" space-before="0.7cm" font-
style="italic">
    <xsl:apply-templates/></fo:block>
  </xsl:template>
</xsl:stylesheet>
0