Estoy creando una hoja de estilo xsl-fo a rtf. Uno de los problemas que tengo es convertir las numerosas unidades de medida en un documento xsl-fo en twips (unidad de medida rtf).xsl convertir/traducir plantilla
Una pieza particular de código caluclates las anchuras de las columnas:
<xsl:value-of select="sum(preceding-sibling:
:fo:table-column/@column-width) + @column-width"/>
... problema que el valor de /@column-width
podría ser cualquier cosa de 1in
(1 pulgada) a 20px
(20 píxeles), así que cuando Hago la suma que fallará.
Necesito convertir de alguna manera @column-width
a un equivelant twip: 1pt = 19.95 twips, 1px = 15 twips, 1pc = 240 twips, 1in = 1440 twips, 1cm = 567 twips, 1mm = 56.7 twips, 1em = 240 twips
Es probable que pueda escribir un método que puede hacer la conversión, pero estoy convencido de que hay alguna manera de hacer uso de la función translate()
hacer esto mucho más eficientemente.
Por favor, tome en cuenta que mi XSL no es tan grande, por lo que un ejemplo de cómo lograr esto será apreciado
EDITAR
he conseguido encontrar algo que quiero, pero no tienen idea cómo llamar a esta plantilla del cálculo anterior:
<xsl:template match="@*" mode="convert-to-twips">
<xsl:variable name="scaling-factor">
<xsl:choose>
<xsl:when test="contains (., 'pt')">19.95</xsl:when>
<xsl:when test="contains (., 'px')">15</xsl:when>
<xsl:when test="contains (., 'pc')">240</xsl:when>
<xsl:when test="contains (., 'in')">1440</xsl:when>
<xsl:when test="contains (., 'cm')">567</xsl:when>
<xsl:when test="contains (., 'mm')">56.7</xsl:when>
<xsl:when test="contains (., 'em')">240</xsl:when>
<!-- guess: 1em = 12pt -->
<xsl:otherwise>1</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="numeric-value"
select="translate (., '-.ptxcinme', '-.')"/>
<xsl:value-of select="$numeric-value * $scaling-factor"/>
</xsl:template>
Buena pregunta, +1. Vea mi respuesta para una solución completa y fácil. –
Sí, y esta es una solución * completa *, no solo un pseudocódigo. –
Mi respuesta quiere ser solo un ejemplo de cómo puede usar su regla de plantilla usando 'xsl: call-template'. También hay un pequeño error en la forma en que está usando 'translate'. Ver mi respuesta, espero que ayude. –