Bonjour,
J'aimerais faire une transformation d'un XML venant d'InfoPath vers du WordML. Cependant je suis confronté à un problème avec les images venant des champs de type XHTML.
Plus précisément, j'arrive à récupérer les images et à les afficher avec ce code (qui vient du site:
http://blogs.3sharp.com/Blog/davidg/):
<xsl:template match="xhtml:img">
<w:r>
<w:pict>
<w:binData>
<xsl:attribute name="w:name">wordml://<xsl:value-of select="@src"/></xsl:attribute>
<xsl:value-of select="@xd:inline"/>
</w:binData>
<v:shape id="_x0000_i1025" type="#_x0000_t75">
<xsl:attribute name="style"><xsl:value-of select="@style"/></xsl:attribute>
<v:imagedata>
<xsl:attribute name="src">wordml://<xsl:value-of select="@src"/></xsl:attribute>
</v:imagedata>
</v:shape>
</w:pict>
</w:r>
</xsl:template>
Le problème ce pose pour les images venant du champ XHTML qui sont "flotante" (dans infopath, format de l'image: habillage du texte/gauche ou droite). En effet, je n'arrive pas à les transformer en WordML en les gardant cette mise en page ou l'image est intégrée au texte (dans word, format de l'image: habillage/encadré).
Voilà ce que j'ai modifié dans mon code, afin d'essayer de résoudre ce problème:
<xsl:template match="xhtml:img">
<w:r>
<w:pict>
<w:binData>
<xsl:attribute name="w:name">wordml://<xsl:value-of select="@src"/></xsl:attribute>
<xsl:value-of select="@xd:inline"/>
</w:binData>
<xsl:choose>
<!-- Gestion des images flotantes -->
<xsl:when test="contains(@style, 'FLOAT') and not(contains(@style, 'none'))">
<v:shape id="_x0000_i1025" type="#_x0000_t75">
<!-- fonction pour récupérer le Width ou le Height dans l'attribut @style: -->
<xsl:attribute name="style">position:absolute;margin-left:0;margin-top:0;width:
<xsl:value-of select="substring-before(substring(normalize-space(translate(@style,'leftrightFLOATWIDTHHEIGHTpx:',' ')),2),';')"/>px;height:
<xsl:value-of select="substring-after(substring(normalize-space(translate(@style,'leftrightFLOATWIDTHHEIGHTpx:',' ')),2),';')"/>px;
z-index:1;mso-position-horizontal:left;mso-position-horizontal-relative:text;mso-position-vertical-relative:text</xsl:attribute>
<v:imagedata>
<xsl:attribute name="src">wordml://<xsl:value-of select="@src"/></xsl:attribute>
</v:imagedata>
<w10:wrap type="square"/>
</v:shape>
</xsl:when>
<xsl:otherwise>
<v:shape id="_x0000_i1025" type="#_x0000_t75">
<xsl:attribute name="style"><xsl:value-of select="@style"/></xsl:attribute>
<v:imagedata>
<xsl:attribute name="src">wordml://<xsl:value-of select="@src"/></xsl:attribute>
</v:imagedata>
</v:shape>
</xsl:otherwise>
</xsl:choose>
</w:pict>
</w:r>
</xsl:template>
Dans ce code, le problème est qu'il faudrait donner la valeur de "margin-top" afin d'avoir l'image à la bonne hauteur dans le paragraphe Word. Cependant, je ne vois pas comment trouver cette valeur dans le XML d'infoPath.
Si qqun à une idée c'est volontiers. Merci d'avance!
Christian