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 :

[XSL-FO]Repetition de cellule apres rupture de page


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Par défaut [XSL-FO]Repetition de cellule apres rupture de page
    Bonjour.
    Je débute depuis 4 jours dans le XSL, donc désolé si ma question peut paraitre débile pour certains.
    Je suis en train de générer des fichier PDF en effectuant une transformation XSL-FO avec FOP.

    J'ai un fichier XML qui se présente de la façon suivante:
    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
    <root1>
        <balise_appli>
             <balise_mere value="value_mere_1">
                  <balise_fille>valeur_fille_1</balise_fille>
                  <balise_fille>valeur_fille_2</balise_fille>
                  ...
             </balise_mere>
             <balise_mere value="value_mere_2">
                  <balise_fille>valeur_fille_3</balise_fille>
                  <balise_fille>valeur_fille_4</balise_fille>
                  ...
             </balise_mere>
             ...
         </balise_appli>
    </root1>
    Donc ma "balise_appli" peut avoir plusieurs "balises_mere", qui elles meme peuvent avoir plusieurs "balise_fille".

    Je souhaite obtenir l'affichage suivant dans mon PDF :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    value_mere_1  value_fille_1
                        value_fille_2
    value_mere_2  value_fille_3
                        value_fille_4
    ...
    Obtenir cet affichage sur une page n'est pas un problème, après tout c'est juste un jeu d'itération et de tableaux.

    Seulement, je souhaiterais qu'arrivé en bas de page, si la liste des "balise_fille" d'une "balise_mere" n'est pas fini, on arrive sur la page suivante en repetant la valeur de la "balise_mere" correspondante.

    Un comportement identique est décrit sur http://www.ecrion.com/Support/Resour...sions.xml.html, paragraphe "les cellules répétées du tableau", mais ce n'est pas du standard xsl-fo.

    Ca fait presque une semaine que je cherche comment venir à bout de ce comportement, et à part un codage tout pourri du XML du style prédéterminer les sauts de pages dans le XML (autant de "balise_appli" que de pages ...), je ne vois pas le bout du tunnel.

    Qqn aurait une suggestion ?

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Par défaut
    le plus pratique pour toi serait de mettre ta balise_mere dans l'entete d'un tableau (donc un tableau par balise_mere!) et de faire en sorte que ce header se repete à chaquelle page ce qui est facile par exemple en mettant un "keep-with-next=always" sur la ligne de ton header si tu as besoin de plus d'explication, n'hesite pas

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Par défaut
    Merci d'abord valal pour ta réponse.

    En fait j'avais déjà essayé cette solution (j'aurai peut-être du le dire )sans le keep-with-next. Je viens de réessayer mais le problème est le même que la dernière fois.

    Pour etre sur que la solution que j'ai appliqué est bien celle que tu m'as décrite:
    Pour chaque balise mere, je crée une nouvelle ligne qui contient un tableau fait uniquement d'un header à 2 colonnes. La première colonne contient la valeur de "balise_mere", la seconde est un tableau 1x1 dans lequel je crée une ligne pour chaque "balise_fille"

    La transformation cherche à afficher tout le header sur la même page. Du coup, si la place restante sur la page est insuffisante pour afficher une balise_mere, FOP fait une rutpure de page et cherche à l'afficher en entier sur la page suivante. Pire : si une balise_mere est trop grande pour l'afficher sur une page, cela plante la transformation.

    Aurais tu une autre idee ?

  4. #4
    Membre émérite
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Par défaut
    slt,

    je ne veux pas que tu mettent des keep-with-next sur toutes les lignes. ..ce que tu dois faire c'est d'utiliser la fonctionalités de repetition des header d'un tableau (comme sous word).

    donc tu ne met dans le header de ton tableau que ce que tu veux avoir apparaitre à chaque saut de page. donc dans ton cas je pense que c'est juste la "balise_mere", ce qui veux dire que ton header dois être une ligne avec un columns-rows-spanned="2" et la balise_mere centré au milieu et ensuite autant de ligne que de balise_fille et donc tu crée autant de tableaux independants que de balise_mere!!!! pas d'imbrication de tablea donc...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Par défaut
    Dear Valal,

    Je viens d'essayer la solution que tu m'as donné (enfin comme je l'ai comprise en tout cas). Voici le bout de code que j'ai écrit:
    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
     
    <xsl:for-each select="balise_mere">
      <fo:table-row>
        <fo:table-cell display-align="before">
          <fo:block>
            <fo:table table-layout="fixed">
              <fo:table-column column-width="185.0pt"/>
              <fo:table-column column-width="329.0pt"/>
              <fo:table-header keep-with-next="always">
                <fo:table-row>
                  <fo:table-cell display-align="before" number-rows-spanned="1000">
                    <fo:block>
                      <xsl:value-of disable-output-escaping="no" select="@value_balise_mere"/>
                    </fo:block>
                  </fo:table-cell>
                </fo:table-row>
                <xsl:for-each select="balise_fille">
                  <fo:table-row>
                    <fo:table-cell display-align="before">
                      <fo:block>
                        <xsl:value-of disable-output-escaping="no" select="."/>
                      </fo:block>
                    </fo:table-cell>
                  </fo:table-row>
                </xsl:for-each>
              </fo:table-header>
              <fo:table-body>
                <fo:table-cell>
                  <fo:block/>
                </fo:table-cell>
              </fo:table-body>
            </fo:table>
          </fo:block>
        </fo:table-cell>
      </fo:table-row>
    </xsl:for-each>
    J'ai mis les rows spanned à 1000 parce que je sais que j'aurai moins de balise_fille que ça .
    Mais j'ai toujours le même problème : un saut de page pour garder le header affiché en une fois.

  6. #6
    Membre émérite
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Par défaut
    ne met pas de "number-rows-spanned" je vois pas en quoi ça te sert? sinon je me suis trompé "columns-rows-spanned" n'existe pas, je voulais dire "number-columns-spanned" en gros ta balise mere se trouve toute seule dans le header...pour le keep-with-next, je ne sais pas quelle version de fop tu utilise mais met le en tout cas sur le fo:table-row de ton header..et ne met pas de balise_fille dans le header puisque tout ce qui est dans le header va s'afficher à chaque saut de page (et dans ton cas seule la balise_mere va s'afficher en debut de page)

Discussions similaires

  1. séparer les cellules apres split&merge
    Par Darkcristal dans le forum Traitement d'images
    Réponses: 5
    Dernier message: 09/07/2007, 16h54
  2. [VBA-E] - Selection automatique Cellules apres des tris
    Par michel2662 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/04/2007, 10h21
  3. [xsl] namespace dans le html apres transformation xslt...
    Par -ADX- dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 15/05/2006, 14h16
  4. [XSL-FO] retour à la ligne après un tableau ?
    Par Mrlud dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 25/04/2005, 17h15
  5. [XSL-FO] Table avec cellule vide
    Par JustAGphy dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 12/05/2004, 14h11

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