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 :

afficher les background-color [XSL-FO]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2008
    Messages : 72
    Par défaut afficher les background-color
    Bonjour.
    Je tente de convertir du html en pdf.
    pour ce faire je passe par Jtidy (html to xhtml), Xalan (xhtml to xsl-fo), et FOP (xsl-fo to pdf).
    En théorie, je devrais obtenir le même visuel que le fichier html.
    Hors les background color n'apparaissent pas.
    Une idée?

    voici mon code html de départ
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <html><body>é<br />Bonjour<br />
    test<u> mise </u>en <em>forme</em> <br />
    <hr />
    <div style="text-align: center"><strong>TOTO et le</strong><span style="background-color: #ffff00"><strong> reste <br />
    </strong></span><span style="color: #0000ff">du monde</span></div></body></html>

    Je joins également un extrait de mon xsl
    Code xsl : 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
    <xsl:template name="process-common-attributes">
    	<xsl:if test="@style">
    		<xsl:call-template name="process-style">
    			<xsl:with-param name="style" select="@style"/>
    		</xsl:call-template>
    	</xsl:if>
    </xsl:template>
     
    <xsl:template name="process-style">
    	<xsl:param name="style"/>
    	<xsl:choose>
    		<xsl:when test="$name = 'background-color'">          
    			<xsl:attribute name="background-color">
    				<xsl:value-of select="$value"/>
    			</xsl:attribute>
    		</xsl:when>
    	</xsl:choose>
    </xsl:template>

  2. #2
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour,

    tu nous montre que ton html de départ et pas le xhtml obtenu avec JTidy.
    Or il suffit que n'ait pas configurer JTidy correctement pour que ton xhtml ne soit pas comme tu le souhaite.

    C'est seulement une fois que tu as un code xhtml correcte que tu pourra créer des règles xslt comme il faut

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2008
    Messages : 72
    Par défaut
    Merci pour la réponse.
    En fait dans mon code (java) je ne génère pas de fichier intermédaire, Je n'ai donc pas accès au code xhtml généré.
    Avec JTidy, j'effectue un parseDOM de mon fichier html.

    Est-ce qu'il y a une étape à faire avant?

  4. #4
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour,

    autant que je me souvienne, non.

    Après, tu peux toujours écrire une règle xslt qui te permettra de vérifier si ton xhtml contient bien l'attribut background-color, et de vérifier ainsi si tu obtient le xhtml que tu souhaite

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2008
    Messages : 72
    Par défaut
    Je crois effectivement que l'attribut est bien transmis...
    J'ai fait quelques essais dans mon xsl lui demandant d'afficher la valeur
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:when test="$name = 'background-color'">          
    		  <!--<xsl:attribute name="color">-->
                <xsl:value-of select="$value"/>
    		  <!--</xsl:attribute>-->
            </xsl:when>
    Le résultat est que la valeur #ffff00 s'affiche.

    si je demande à afficher le background (qui n'existe pas selon W3C)
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:when test="$name = 'background-color'">          
    		  <xsl:attribute name="background-color">
                <xsl:value-of select="$value"/>
    		  </xsl:attribute>
            </xsl:when>
    le résultat est rien... je n'ai pas de couleur qui s'affiche.

  6. #6
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Pour bien faire, il faudrait montrer plus de code XSLT,
    car je crois que c'est pour créer un élément ou un attribut que tu as un soucis.

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2008
    Messages : 72
    Par défaut
    Ayé, j'ai réussi à récupérer les fichiers intermédiaires...

    voici le html parsé en xml (tidy.parseDOM())
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <html>
    <head>
    <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta content="HTML Tidy, see www.w3.org" name="generator">
    <title></title>
    </head>
    <body>&eacute;<br>Bonjour<br>test <u>mise</u> en <em>forme</em> 
    <br>
    <hr>
    <div style="text-align: center">
    <strong>Toto et le</strong><span style="background-color: #ffff00"><strong>reste<br>
    </strong></span> <span style="color: #0000ff">du monde</span>
    </div>
    </body>
    </html>

    et voici le xml parsé en FO
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <fo:root hyphenate="false" role="html" text-align="start" writing-mode="lr-tb" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:html="http://www.w3.org/1999/xhtml"><fo:layout-master-set><fo:simple-page-master master-name="all-pages" page-height="auto" page-width="auto"><fo:region-body column-count="1" column-gap="12pt" margin-bottom="1in" margin-left="1in" margin-right="1in" margin-top="1in"/><fo:region-before display-align="before" extent="1in" region-name="page-header"/><fo:region-after display-align="after" extent="1in" region-name="page-footer"/><fo:region-start extent="1in"/><fo:region-end extent="1in"/></fo:simple-page-master></fo:layout-master-set><fo:page-sequence master-reference="all-pages"><fo:title/><fo:static-content flow-name="page-header"><fo:block font-size="small" space-before="0.5in" space-before.conditionality="retain" text-align="center"/></fo:static-content><fo:static-content flow-name="page-footer"><fo:block font-size="small" space-after="0.5in" space-after.conditionality="retain" text-align="center">- <fo:page-number/> -</fo:block></fo:static-content><fo:flow flow-name="xsl-region-body"><fo:block role="body">é<fo:block role="br"/>Bonjour<fo:block role="br"/>test <fo:inline role="u" text-decoration="underline">mise</fo:inline> en <fo:inline font-style="italic" role="em">forme</fo:inline> <fo:block role="br"/><fo:block border="1px inset" role="hr" space-after="0.67em" space-before="0.67em"/><fo:block role="div" text-align="center"><fo:inline font-weight="bolder" role="strong">Toto et le</fo:inline><fo:inline background-color="#ffff00" role="span"><fo:inline font-weight="bolder" role="strong">reste<fo:block role="br"/></fo:inline></fo:inline> <fo:inline color="#0000ff" role="span">du monde</fo:inline></fo:block></fo:block></fo:flow></fo:page-sequence></fo:root>

    Bon c'est brut de fonderie mais je vois quelques modif par rapport à mon html de départ...
    La première sur les balises <br /> et <hr /> le slash de fin est supprimé.
    la deuxième certains espaces sont supprimés.
    la troisième la balise <strong> n'est pas prise en compte.

    du coup je vois pas trop ce que je pourrais modifier... peut etre au niveau du tidy avec une option mais je connais mal...

    Mon xsl ne tenant pas en entier (trop long) je le joint en pj
    Fichiers attachés Fichiers attachés
    • Type de fichier : xsl 12.xsl (61,8 Ko, 81 affichages)

  8. #8
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    les balises <br /> et <hr /> le slash de fin est supprimé.
    Tu obtient donc du html et non pas du xhtml !

    la deuxième certains espaces sont supprimés.
    tu devrait pouvoir les gérer avec JTidy.

    Et pour en revenir avec ton attibut background-color,
    le soucis semble réglé !?

  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2008
    Messages : 72
    Par défaut
    et bien en fait non...
    le background-color ne s'affiche pas. Il est bien présent dans les différents codes intermédiaires mais il ne s'affiche pas. Je ne vois pas pourquoi...
    Je vais regarder du coté de JTidy.

  10. #10
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Il est bien présent dans les différents codes intermédiaires mais il ne s'affiche pas.
    D'après le code FO que tu fourni, l'attribut background-color est bien présent.

    Après, il s'agit de savoir si ton processeur XSL-FO pour quels éléments cet attribut est pris en charge. Tu utilise quel processeur ?

  11. #11
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2008
    Messages : 72
    Par défaut
    C'est FOP d'Apache version 0.20 ... je n'en sait pas plus...
    Désolé

  12. #12
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Euh, c'est pas tout neuf, ça. Le site de fop propose la version 0.95 depuis un bon moment.
    Ils indiquent qu'il y a support de background-color, mais il est pas dit que ce soit le cas depuis la version 0.20.

    Citation Envoyé par ruza01
    si je demande à afficher le background (qui n'existe pas selon W3C)
    Le lien que tu nous montres, là, c'est vers w3schools.com, pas le W3C.
    w3schools.com raconte pas mal de c*nneries, mais en l’occurrence j'ai pas compris ce que tu voulais dire.

    Le W3C parle bel et bien de background-color.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2008
    Messages : 72
    Par défaut
    Pour fop 0.20 je sais que ce n'est plus tout jeune et que des versions plus récentes sont dispo... seulement mon dev doit être intégré à un outil (utilisant JBoss) et en terme de compatibilité avec tout le reste (y'en a beaucoup!!) je ne sais pas ce que ca engendrerait d'upgrader la version de fop...
    Cependant l'archive fop 0.20 est toujours dispo sur le site d'apache et dans la doc il est indiqué que le "background-color" est une option existante. donc normalement pas de souci de ce coté.

    Pour le W3School ils disent que l'attribut color et transparent existe mais je n'ai rien trouvé sur le background... mais je ne regardais pas au bon endroit apparemment... c'est vrai suis aller un peu vite.... mea culpa
    mais pour le coup ils racontent la même chose j'ai l'impression...

    En revanche je crois que c'est Jtidy qui me met un peu la grouille...
    j'ai le code suivant
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Tidy tidy = new Tidy();
    tidy.setXHTML(true);
     
    Document xmlDoc = tidy.parseDOM(input,null);

    lorsque j'affiche le résultat du parseDOM le résultat me semble correcte. Le texte contenu est quasi identique au html de départ.
    mais lorsque j'affiche le xmlDoc là ça ne ressemble pas franchement à ce que j'avais au départ...

    Est-ce qu'il y aurait des pro de jtidy? est-ce que je regarde au bon endroit...?

  14. #14
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Je refères le post de 2012-01-03 11h46, essayez ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <xsl:when test="$name = 'background-color'">          
        <xsl:attribute name="style">
            <xsl:value-of select="concat('background-color:',$value,';')"/>
        </xsl:attribute>
    </xsl:when>

  15. #15
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2008
    Messages : 72
    Par défaut
    Pas mieux

  16. #16
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bon plusieurs choses :

    il est clair que la doc du W3school : bof bof ! Seule la documentation de fop 0.20 va t'indiquer l'utilisation de background-color.

    lorsque j'affiche le résultat du parseDOM le résultat me semble correcte. Le texte contenu est quasi identique au html de départ.
    mais lorsque j'affiche le xmlDoc là ça ne ressemble pas franchement à ce que j'avais au départ...
    Je vois vraiment pas pourquoi tu va chercher xmlDoc !!!

    C'est brouillon ce que tu nous dis (enfin ce n'est que mon point de vue) . Il faut procéder étape par étape. Une fois que tu as ton xhtml correcte, tu t'occupe de ta transformation xsl, ...

  17. #17
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2008
    Messages : 72
    Par défaut
    Je commentais juste les résultats intermédiaires pour voir où est-ce que ca ne respecte plus le fichier de départ...
    Désolé si je suis un peu brouillon mais j'avoue que je ne maitrise pas le sujet (il faut bien une premiere fois... mais c'est jamais térrible) et que j'essaie d'ouvrir plusieurs pistes pour me donner des idées.

    Alors effectivement j'arrive bien à faire la conversion html>xhtml avec jtidy
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Tidy tidy = new Tidy();
    tidy.setXHTML(true);
     
    Document xmlDoc = tidy.parseDOM(input,null);
    Donc dans xmlDoc j'ai un xml provenant de mon xhtml (tidy.setXHTML(true) ).
    Ensuite j'appelle une méthode de Xalan pour appliquer le xsl, puis je passe par fop.
    La version 0.20 utilise la classe org.apache.fop.apps.Driver
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Driver driver = new Driver(fopInputSource, out);
    driver.setLogger(log);
    driver.setRenderer(Driver.RENDER_PDF);
    driver.run();

    J'ai vu une chose dans le log (je l'ai mis en place il y a peu )
    J'ai vu les lignes ERROR suivantes

    [ERROR] property 'style' ignored
    [INFO] [1]
    [ERROR] defaulted font to any,normal,normal
    [ERROR] unknown font sans-serif,normal,bolder so defaulted font to any
    [ERROR] defaulted font to any,normal,normal
    [ERROR] unknown font sans-serif,normal,bolder so defaulted font to any
    [ERROR] defaulted font to any,normal,normal
    [ERROR] unknown font sans-serif,normal,bolder so defaulted font to any
    [DEBUG] Last page-sequence produced 1 pages.
    Là il dit bien que la balise style est ignorée... mais pourquoi???

  18. #18
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Là, j'en sais rien !!!

  19. #19
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2008
    Messages : 72
    Par défaut
    Bonjour.
    Et voici après quelques recherches et réflexion... Ma solution

    Donc ce que j'ai changé...
    utilisation de fop 1 au lieu de fop 0.20
    modification de ma classe java pour fabriquer des fichiers intermédiaires
    modification de ma classe java avec le séquencement suivant (les méthodes sont issue de fop) :
    html to xml (jtidy)
    xml to fo (jtidy)
    fo to pdf (jtidy)

    le xsl n'a pas changé (il était bon depuis le début faut croire )

    ceci est un premier jet et je reste convaincu que ca peut se réaliser sans production de fichiers intermédiaires... mais c'est déjà pas mal comme ça

    Merci pour la participation.
    Cordialement

  20. #20
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour,

    tu as bien fait de passer à fop 1.0, car fop 0.20 n'est vraiment plus d'actualité

    En fait, je crois que tu pourrais utiliser plus simplement :
    jtidy : html -> xml
    xalan : xml -> fo
    fop : fo -> pdf

    Et la mise en oeuvre de fichiers intermédiaires n'est vraiment nécessaire que dans des cas précis.

    Bon courage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Peut-on faire un background-color sur la balise area dans les map?
    Par dev14 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 24/03/2013, 20h45
  2. afficher masquer background-color
    Par totofe49 dans le forum jQuery
    Réponses: 2
    Dernier message: 25/03/2011, 13h50
  3. afficher les images background
    Par DELYMED2 dans le forum ASP
    Réponses: 2
    Dernier message: 17/10/2005, 09h09
  4. Comment afficher les accent sous mysql v4.0.13
    Par buildozer dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/06/2003, 09h33
  5. Afficher les bonnes facettes
    Par WormsHL-Groove dans le forum OpenGL
    Réponses: 3
    Dernier message: 26/08/2002, 21h36

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