IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

xml-xsl-fo : probleme d'affichage d'un tableau


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 3
    Points : 1
    Points
    1
    Par défaut xml-xsl-fo : probleme d'affichage d'un tableau
    Bonjour,
    je cherche à créer un document pdf à partir d'un document xml et d'un document xsl(en utilisant fop).
    dans ce doc pdf, je veux créer un tableau avec des données dynamiques.
    ma question est:
    1) j'aimerais avoir le tableau affiché en "paysage" et non en "portrait" dans ma page.
    2) j'aimerais que les libellés des colonnes du tableau soient affichés à la verticale
    et non à l'horizontale pour un gain de place en largeur, vu que le nombre de colonnes pourra
    varier dynamiquement(données venant de la base, mais pouvant être modifiées dans l'appli):
    ===> pas TITRE
    mais
    T
    I
    T
    R
    E

    merci d'avance

    Clindoeil

    ci-joint mon doc xsl:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
     
       <xsl:template match="statistique">
          <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
     
    		<fo:layout-master-set>
                <fo:simple-page-master master-name="portrait" page-height="29.7cm" page-width="21cm" margin-top="2.5cm" margin-bottom="1cm" margin-left="0.5cm" margin-right="0.5cm">
                   <fo:region-body margin-top="0cm" margin-bottom="2.5cm"/>
                   <fo:region-before extent="0cm"/>
                   <fo:region-after extent="1.5cm"/>
                </fo:simple-page-master>
            </fo:layout-master-set>
     
            <fo:page-sequence master-reference="portrait">
    			<fo:static-content flow-name="xsl-region-after">
                	<fo:block text-align="start" font-size="8pt" font-family="sans-serif">
            			blabla         
          			</fo:block>
                   	<fo:block text-align="end" font-size="8pt" font-family="sans-serif">
                      Page (
                      <fo:page-number/>
                      )
                   	</fo:block>
    			</fo:static-content>
     
             	<fo:flow flow-name="xsl-region-body">
                   	<fo:block text-align="center" space-after.optimum="15pt">
                      <fo:external-graphic src="file:c:/blabla.gif"/>
                   	</fo:block>
                   	<fo:block font-size="24pt" font-family="sans-serif" line-height="24pt" space-after.optimum="15pt" background-color="white" color="rgb(41,74,140)" text-align="center" padding-top="3pt">
            			blabla
          			</fo:block>
                   		<xsl:apply-templates select="tableau"/>
                </fo:flow>
     
             </fo:page-sequence>
    		</fo:root>
    	</xsl:template>
     
       	<xsl:template match="tableau">
    		<fo:table table-layout="fixed" border-collapse="separate">
    			<xsl:for-each select="enteteTableau/entete">
    				<fo:table-column column-width="1.8cm"/>
    			</xsl:for-each>
             	<fo:table-header>
                	<fo:table-row>
                		<xsl:for-each select="enteteTableau/entete">
    	            		<fo:table-cell border-width="0.1mm" border-style="solid" background-color="rgb(229,255,229)">
    	                		<fo:block text-align="center"><xsl:value-of select="."/></fo:block>
    	               		</fo:table-cell>				
    					</xsl:for-each>
                	</fo:table-row>
    			</fo:table-header>
            	<fo:table-body>
    		    	<xsl:apply-templates/>
            	</fo:table-body>
    		</fo:table>
    	</xsl:template>
     
     
       	<xsl:template match="statistiqueTypeAnomalie">
        	<fo:table-row>
    	        etc...	        
          	</fo:table-row>
       </xsl:template>
     
    </xsl:stylesheet>

  2. #2
    Membre du Club Avatar de philemon_siclone
    Inscrit en
    Septembre 2003
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 67
    Points : 67
    Points
    67
    Par défaut
    Salut,

    Je ne sais pas si je vais pouvoir t'être d'une grande aide. Voici quand même quelques élements de réponse :
    1) pour le format paysage, la façon la plus propre serait, à mon avis d'utiliser la propriété "reference-orientation" (la mettre à -90). Mais celle-ci n'est pas implementé dans FOP. Donc, il faut faire quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <fo:simple-page-master master-name="landscapeA4" page-height="21cm" page-width="29.7cm" margin-top="2cm" margin-bottom="2cm" margin-left="1cm" margin-right="1cm">
    2) pour les libellés verticaux, ce n'est (à ma connaissance (bien réduite :-))) pas possible pour l'instant sachant que la propriété "writing-mode" n'est pas gérée par FOP. Il ne te reste plus qu'à le gérer dans ton XSLT en générant qqchose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <block>T</block>
    <block>I</block>
    <block>T</block>
    <block>I</block>
    Je sais, c'est pas l'idée du siècle, mais à mon avis ça ne pose pas vraiment de problème.

    Désolé pour cette réponse bien triste...

    Cordialement,

    Phil

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 3
    Points : 1
    Points
    1
    Par défaut merci phil: encore une question..
    salut Phil,
    tout d'abord merci d'avoir repondu!

    j'avais effectivement trouvé sur le net
    - pour le format paysage, la propriété "reference-orientation" (la mettre à -90).

    - pour les libellés verticaux, la propriété "writing-mode"
    et j'avais essayé de les tester, sans succes. je comprends mieux pourquoi cela ne marchait pas, depuis qu tu m'as dit
    que ces propriétés n'etaient pas gérées par FOP. Mais avec quoi sont elles gérées alors?..

    merci encore

  4. #4
    Membre du Club Avatar de philemon_siclone
    Inscrit en
    Septembre 2003
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 67
    Points : 67
    Points
    67
    Par défaut
    Mais avec quoi sont elles gérées alors?..
    FOP n'est pas le seul processeur FO qui existe. Il y a par exemple :
    • - RenderX XEP Formatter
      - Antenna House Formatter
      - PassiveTEX Formatter
      - Unicorn Formatting Objects Formatter (UFO)
      - REXP
      - jfor
      - XMLmind FO Converter
      - XSLfast
      - Epic Editor V4.2
      - IBM XFC

    Bien sur, tous ne sont pas gratuits/opensource (loin de là) et diffèrent en ce qui concerne l'environnement (java/windows/unix), les performances et le degré de compatibilité avec la norme du W3C.

    Bye,

    Phil

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    ok...merci des infos!

    autre question:
    mon tableau est défini dans le fo:region-body défini tel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <fo:layout-master-set>
                <fo:simple-page-master master-name="portrait" page-height="29.7cm" page-width="21cm" margin-top="2.5cm" margin-bottom="1cm" margin-left="2.5cm" margin-right="2.5cm">
                   <fo:region-body margin-top="0cm" margin-bottom="2.5cm"/>
                   <fo:region-before extent="0cm"/>
                   <fo:region-after extent="1.5cm"/>
                </fo:simple-page-master>
            </fo:layout-master-set>

    mais dans le fo:region-body , j'affiche des images et des titres aussi. j'arrive à centrer ces derniers avec la propriété text-align, mais je n'arrive pas à centrer le tableau. le nombre de colonnes variant selon les données en base, j'aimerais qu'il se centre par lui-meme, selon les données. existe-t-il une propriete pour centrer un tableau?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
             	<fo:flow flow-name="xsl-region-body">
                   	<xsl:apply-templates select="photo"/>
                   	<fo:block font-size="24pt" font-family="sans-serif" line-height="24pt" space-after.optimum="15pt" background-color="white" color="rgb(41,74,140)" text-align="center" padding-top="3pt">
            			Statistiques fonctionnelles GefiNET
          			</fo:block>
                   	<xsl:apply-templates select="titre"/>
                   	<xsl:apply-templates select="tableau"/>
                   	<xsl:apply-templates select="legendes"/>
                </fo:flow>
    ci-joint le code du tableau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
       	<xsl:template match="tableau">
    		<fo:table table-layout="fixed" border-collapse="separate">
    			<fo:table-column column-width="2cm"/>
    			<xsl:for-each select="enteteTableau/entete">
    				<fo:table-column column-width="1.4cm"/>
    			</xsl:for-each>
    			<fo:table-column column-width="1.4cm"/>
     
             	<fo:table-header>
                	<fo:table-row>
                		<fo:table-cell border-width="0.1mm" border-style="solid" background-color="rgb(229,255,229)">
    	    				<fo:block text-align="center" font-size="10pt">
    	    					Application
    	    				</fo:block>
    					</fo:table-cell>
    					<xsl:apply-templates select="enteteTableau/entete"/>
    					<fo:table-cell border-width="0.1mm" border-style="solid" background-color="rgb(229,255,229)">
    	    				<fo:block text-align="center"  font-size="10pt">
    	    					TOTAL
    	    				</fo:block>
    					</fo:table-cell>
                	</fo:table-row>
    			</fo:table-header>
     
            	<fo:table-body>
    		    	<xsl:apply-templates select="statistiqueTypeAnomalie"/>
            	</fo:table-body>
    		</fo:table>
    	</xsl:template>
    merci d'avance,
    clin doeil[/code]

  6. #6
    Membre du Club Avatar de philemon_siclone
    Inscrit en
    Septembre 2003
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 67
    Points : 67
    Points
    67
    Par défaut
    Voilà ce que j'ai trouvé sur le sujet dans mon bouquin de xsl-fo:
    How can I center a block across the page - for instance a table ?
    You can indent the table by half the width of the item, as in :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <fo:block width="4in" start-indent="(100% - 4in) div 2">
    <xsl:apply-content/>
    </fo:block>
    Mais j'ai essayé et FOP n'a pas l'air de le gerer (une fois n'est pas coutume) .

    Voilà, donc tu vas être obligé de calculer tout ça dans ton xsl...

    Phil,

    PS : tu as vraiment le chic pour vouloir faire des choses qui ne sont pas implementées dans FOP .

Discussions similaires

  1. [Oracle] probleme d'affichage d'un tableau
    Par billainfo dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/07/2007, 19h08
  2. probleme d'affichage d'un tableau sudoku
    Par masterix59 dans le forum C
    Réponses: 2
    Dernier message: 05/12/2006, 00h04
  3. Probleme sur affichage d'un tableau
    Par bilou95 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 12/10/2006, 16h31
  4. Problème d'affichage d'un tableau
    Par Sid ali dans le forum Langage
    Réponses: 14
    Dernier message: 28/02/2006, 00h24
  5. [xml-xsl][debutant]probleme de recuperation d'url
    Par psychogore dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/04/2005, 17h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo