hni*_*sen 7 java xslt svg pdf-generation xsl-fo
我的第一个问题; 我目前正在修复一个使用XSLFO将我们的语法转换为FO并最终将其转换为PDF的图形服务.
以前我们一直在使用PDF导出中的网络PNG图表,但这会产生非常难看的结果,因此我们决定使用SVG替代PDF.
但是,SVG似乎没有正确扩展到SVG画布.
以下是运行XSLFO之前的语法:
<img src="someimage.svg">
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的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>
Run Code Online (Sandbox Code Playgroud)
SVG确实出现在PDF中,它确实包含在画布中 - 但无论出于何种原因,我都无法正确地进行缩放.它真的非常非常庞大,结果是一个非常裁剪的SVG版本.
我在这里没有任何建议 - 这里有没有人有这方面的经验?
PS:使用最新版本的Batik创建图像,并正确设置宽度和高度.
实际上,instream-foreign-object 似乎根本无法缩放 SVG,即使使用正确的画布设置也是如此。通过在 SVG 上设置正确的画布,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>
Run Code Online (Sandbox Code Playgroud)