Primera pregunta mía; Actualmente estoy reparando un servicio de gráficos que usa XSLFO para convertir nuestra sintaxis a FO y convertirlo a PDF al final.Mostrando SVG usando XSLFO
Anteriormente hemos estado utilizando gráficos PNG de la web en las exportaciones de PDF, pero esto crea resultados realmente desagradables, por lo que hemos decidido ir con SVG para PDF en su lugar.
Sin embargo, el SVG no parece escalar correctamente en el lienzo SVG.
Ésta es la sintaxis antes de ejecutar en XSLFO:
<img src="someimage.svg">
y aquí está la XSLFO estoy usando:
<xsl:template match="img">
<fo:block space-after="12pt">
<fo:instream-foreign-object width="20cm" height="15cm" content-width="scale-to-fit" content-height="scale-to-fit" scaling="uniform" background-color="#cccccc">
<svg:svg x="0" y="0" width="100" height="100" viewBox="0 0 100 100">
<svg:image x="0" y="0" width="100" height="100">
<xsl:if test="@src">
<xsl:attribute name="xlink:href">
<xsl:choose>
<xsl:when test="starts-with(@src, 'http://')">
<xsl:value-of select="@src"/>
</xsl:when>
<xsl:when test="starts-with(@src, 'https://')">
<xsl:value-of select="@src"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat($baseurl, @src)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:if>
</svg:image>
</svg:svg>
</fo:instream-foreign-object>
</fo:block>
</xsl:template>
El SVG sí aparece en el PDF, y lo hace parecer contenían dentro del lienzo, pero por alguna razón no puedo hacer que escale correctamente. Es realmente, realmente enorme, y el resultado es una versión extremadamente corta del SVG.
Me estoy quedando sin sugerencias aquí - ¿hay alguien aquí que tenga experiencia con esto?
PD: La imagen se crea utilizando la versión más reciente de Batik, y el ancho y el alto se configuran correctamente.