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] texte dépasse d'1 cellule sur l'autre [FAQ]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 11
    Points : 1
    Points
    1
    Par défaut [XSL~FO] texte dépasse d'1 cellule sur l'autre
    Bonjour,


    j'essaie d'insérer un mot très long dans une cellule d'une table FO.

    Lorsqu'il y a un espace dans le mot, le passage à la ligne s'effectue, par contre lorsque le mot n'a pas d'espace il ne se "coupe" pas et donc dépasse sur les cellules voisines de la table FO.

    Quelqu'un a-t-il une solution a ce pb qui doit être assez courant?

    Merci d'avance.

    Charly.

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    Par défaut
    j'ai déja eu ce pb...malhereusement à part découpé la chaine (inserer des espaces dedant...) j'avais pas trouvé de solution...j'avais fait un prétraitement de la chaine en question avec une extention java...pour moi c'était les références de produits qui posaient pb (ex : DCLM_DDDF2555DZ525R555555). n'hesite pas à nous dire si tu trouvé une solution propre...
    bonne chance.

  3. #3
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Salut,

    Piste à tester:

    il existe un caractère en hexadecimal je sais plus lequel et surtout si ca marche avec FOP!

    Je te le copis juste en ces deux crochet

    J'espère qu'il passera a travers le forum.

    Bref moi je l'utilise dans mes XSLT qui font du WordML et ca marche nickel. (Si tu as office fait crtl+espace et copie le caractère dans ton XSLT avec 2003 ca marche avec les autre je sais pas). C'est bizzare c'est interprétés comme un espace sans en être vraiment un vrai.

    ++

    Thierry

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Merci pour cette idée.

    J'ai tenté avec le caractère ALT+0160 qui est un faux espace mais non ça me sort un espace normal sur mon pdf

  5. #5
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    Citation Envoyé par Charly33
    J'ai tenté avec le caractère ALT+0160 qui est un faux espace mais non ça me sort un espace normal sur mon pdf
    Normal que ça ne fonctionne pas, c'est pour faire l'opération inverse : insérer un espace insécable pour empêcher le retour à la ligne...

    Il existe une solution qui consiste à insérer des espaces à largeur nulle, dont le numéro Unicode en hexa est 200B ; ces espaces n'apparaîtront pas dans le document, mais interprétés par FOP comme des espaces ils permettront un retour à la ligne dans les chaînes où ils sont insérés. Pour les insérer entre chaque caractère d'une chaîne, il faut écrire une petite fonction XSLT du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <xsl:template name="insere-espaces-largeur-nulle">
      <xsl:param name="chaine"/>
      <xsl:value-of select="substring($chaine, 1, 1)"/>
      <xsl:if test="string-length($chaine) &gt; 1">
        <xsl:text>&#x200B;</xsl:text>
        <xsl:call-template name="insere-espaces-largeur-nulle">
          <xsl:with-param name="chaine" select="substring($chaine, 2)" />
        </xsl:call-template>
      </xsl:if>
    </xsl:template>
    Evidemment, si tu connais le nombre maximum de caractères affichables dans ta colonne, il est plus simple et plus performant de faire toi-même la césure avec substring()...

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    bonjour,

    essais en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    <fo:block hyphenate="true">
    ton texte
    </fo:texte>
    ...
    Je ne l'ai pas testé mais normalement :

    L'algorithme de coupure de ligne doit employer une césure pour le texte contenu dans cet objet
    Par defaut "hyphenate" = FALSE

    Bonne chance.
    a+

  7. #7
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Citation Envoyé par atoila
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    <fo:block hyphenate="true">
    ton texte
    </fo:texte>
    ...
    Attention, hyphenate ne sert qu'à activer l'affichage du caractère de césure lorsqu'il y a rupture de ligne, il n'active pas la rupture de ligne elle-même.

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    Est-ce que c'est pas possible de considérer que la rupture de ligne se fait à la fin de la cellule ?

    Si il y a un espace, le retour à la ligne se fait automatiquement.

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par GrandFather
    Il existe une solution qui consiste à insérer des espaces à largeur nulle, dont le numéro Unicode en hexa est 200B ; ces espaces n'apparaîtront pas dans le document, mais interprétés par FOP comme des espaces ils permettront un retour à la ligne dans les chaînes où ils sont insérés.
    Bonjour et merci pour cette proposition !

    Malheureusement toujours le même problème, le caractère &#x200B; se retrouve en tant qu'espace dans le fichier PDF généré

    Citation Envoyé par GrandFather
    Evidemment, si tu connais le nombre maximum de caractères affichables dans ta colonne, il est plus simple et plus performant de faire toi-même la césure avec substring()...
    Je connais la largeur, le pb c'est 30 i prennent 2 fois moins de place que 30 M donc même avec un nombre de caractères fixes je n'aurai pas une longueur fixe

    Quant au hyphenate, ça ne fait rien de +.

    Bon cette fois je crois que c'est la fin...

  10. #10
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    Par défaut
    tu peux utiliser "­" au lieu de &#x200B; .....
    ceci te permet d'avoir un tiret lorsque un saut de ligne est nécessaire ..

  11. #11
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Citation Envoyé par Charly33
    Malheureusement toujours le même problème, le caractère &#x200B; se retrouve en tant qu'espace dans le fichier PDF généré
    Il va falloir que je teste, c'est pourtant censé être une méthode éprouvée...
    Citation Envoyé par Charly33
    Je connais la largeur, le pb c'est 30 i prennent 2 fois moins de place que 30 M donc même avec un nombre de caractères fixes je n'aurai pas une longueur fixe
    Pourquoi n'utilises-tu pas une police non proportionnelle ?

  12. #12
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par GrandFather
    Pourquoi n'utilises-tu pas une police non proportionnelle ?
    euh...parce que je connais pas
    Je vais essayer de me renseigner

  13. #13
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    Par défaut
    et le tiret, t'en veut pas?


  14. #14
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par valal
    et le tiret, t'en veut pas?
    bah je veux pas que ça me rajoute des tirets dans mes mots

    Enfin de toute façon j'ai testé et....

    Original exception : org.xml.sax.SAXParseException: The entity "shy" was referenced, but not declared.

  15. #15
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    Par défaut
    ça te rajoute des tirets que quand il ya un retour à la ligne!!! en plus ça permet aux gens de savoir que la réference continue sur la ligne d'aprés....contrairement à un blanc où on ne le sait pas!

    je te donne l'une de ses utilisations typiques

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The other interpretation is that ­ would mark an *invisible* point at which a word can be broken; thus, "al­go­rithm" could be used to represent a word which can be broken at a margin into the portions "al-" and "gorithm," or "algo-" and "rithm," depending on which is needed by the browser.
    pour ton erreur essaye de mettre le code unicode de shy ou déclare là comme entité, comme ds cet ex:

    [CODE]<?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE nomracine [
    <!ENTITY copy "&#169;">
    ]>
    <nomracine>
    Utilisation d'une entité interne : &copy; 2002
    </nomracine>
    CODE]

  16. #16
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par valal
    pour ton erreur essaye de mettre le code unicode de shy
    ah oui ça marche tout de suite mieux, j'ai bien des tirets mais toujours pas de retour à la ligne automatique en fin de colonne...

    Merci à tous pour votre aide

  17. #17
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    Par défaut
    bah, si tu met les shy aux bons endroits, tu devrais avoir des retour à la ligne si nécessaire!!!!biensur en utilisant la fonction de "GrandFather"...de plus les tirets ne devrait apparaitre que lors des retours à la ligne.

  18. #18
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Charly33
    Malheureusement toujours le même problème, le caractère &#x200B; se retrouve en tant qu'espace dans le fichier PDF généré
    Je suis en train de me demander si c'est pas un pb de config, peut etre qu'il faut ajouter qqchose pr prendre en compte tous les caractères unicodes dont &#x200B;

  19. #19
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    Par défaut
    je viens de tester ceci chez moi:

    remplace le shy (&#173*) par &#8201 et ça devrait fonctionner!

  20. #20
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par valal
    remplace le shy (&#173*) par &#8201 et ça devrait fonctionner!
    et non toujours pareil ça me sort des espaces entre chaque lettre sur mon pdf
    (toujours en utilisant la fonction de GrandFather)

Discussions similaires

  1. [XSL-FO] texte avec rotation
    Par minou2005 dans le forum XSL/XSLT/XPATH
    Réponses: 15
    Dernier message: 21/03/2008, 09h27
  2. [XSL~FO] Texte dans Border
    Par troisj dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 21/02/2007, 15h18
  3. zone de texte - mots de passe
    Par deneufchatel dans le forum Access
    Réponses: 1
    Dernier message: 05/09/2006, 16h14
  4. [XSL][=>sortie "texte"]insérer des espaces
    Par koudjo dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 03/07/2006, 12h57
  5. [Génération Fichier Texte] \n ne passe pas bien
    Par nebule dans le forum Langage
    Réponses: 6
    Dernier message: 09/05/2006, 14h01

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