我的第一个问题;我目前正在修复一个图形服务,它使用 XSLFO 将我们的语法转换为 FO,并最终将其转换为 PDF。
以前我们一直在 PDF 导出中使用来自网络的 PNG 图,但这会产生非常难看的结果,因此我们决定使用 SVG 来代替 PDF。
但是,SVG 似乎无法正确缩放到 SVG 画布中。
这是运行到 XSLFO 之前的语法:
<img src="someimage.svg">
这是我正在使用的 XSLFO:
<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>
SVG 确实出现在 PDF 中,并且似乎包含在画布中 - 但无论出于何种原因,我都无法使其正确缩放。它真的非常非常大,结果是 SVG 的一个非常裁剪的版本。
我的建议用完了 - 这里有没有人有这方面的经验?
PS:图片是使用最新版Batik制作的,宽高设置正确。