gpt4 book ai didi

java - 使用 XSLFO 显示 SVG

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:29:13 25 4
gpt4 key购买 nike

我的第一个问题;我目前正在修复一个图形服务,该服务使用 XSLFO 将我们的语法转换为 FO,并最终将其转换为 PDF。

以前我们一直在 PDF 导出中使用来自网络的 PNG 图形,但这会产生非常难看的结果,因此我们决定改为使用 SVG 导出 PDF。

但是,SVG 似乎无法正确缩放到 SVG Canvas 中。

这是运行 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 中,而且它似乎包含在 Canvas 中 - 但无论出于何种原因,我都无法正确缩放它。它真的非常非常大,结果是 SVG 的极度裁剪版本。

我在这里的建议用完了 - 这里有没有人有这方面的经验?

PS:图片使用最新版Batik制作,宽高设置合理。

最佳答案

实际上,instream-foreign-object 似乎根本无法缩放 SVG,即使使用适当的 Canvas 集也是如此。通过在 SVG 上设置正确的 Canvas ,fo:external-graphic 成功了 ;-)

谢谢你们给我的提示 :-) 这是有效的方法:

    <fo:external-graphic content-width="25cm" content-height="16cm">
<xsl:if test="@src">
<xsl:attribute name="src">
<xsl:choose>
<xsl:when test="starts-with(@src, 'http://')">
<xsl:value-of select="concat('url(',@src,')')"/>
</xsl:when>
<xsl:when test="starts-with(@src, 'https://')">
<xsl:value-of select="concat('url(',@src,')')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat('url(',$baseurl, @src,')') + ')'"/>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:if>
</fo:external-graphic>

关于java - 使用 XSLFO 显示 SVG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2340476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com