我正在浏览Apache FOP快速入门。我从命令行转换一个包含svg元素的简单xml文件,并将其转换为pdf文件。我能够做到这一点,但svg生成的图像正在切断。我是XSL-FO&的新手。 Apache FOP,但我确实查看了属性的w3c文档。不幸的是,现在我更加困惑了。我试过以下没有运气:改变宽度& svg本身的高度属性;设置页面高度&简单页面主元素中的页面宽度为“auto”;消除保证金属性。我没有看到任何表明区域体开始有一些默认大小的东西。
这是xml:
<chart>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="600" height="100">
<circle cx="50" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
<circle cx="100" cy="100" r="40" stroke="black" stroke-width="2" fill="green" />
</svg>
这是xsl:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<fo:root>
<fo:layout-master-set>
<fo:simple-page-master master-name="A4-portrait"
margin="10">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4-portrait">
<fo:flow flow-name="xsl-region-body">
<fo:block>
<fo:instream-foreign-object xmlns:svg="http://www.w3.org/2000/svg" content-width="600" content-height="300">
<svg:svg>
<xsl:copy-of select="/chart/svg:svg"/>
</svg:svg>
</fo:instream-foreign-object>
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
</xsl:stylesheet>
该图像应显示红色&amp;绿色圆圈重叠,但它只显示绿色圆圈的左上角。我希望我缺少的块元素中有一个属性,但我不知道哪个属性。我觉得这个块的大小限制在100px x 100px。
我缺少什么属性以及如何才能正确显示整个svg图像(两个完整的圆圈重叠)?
谢谢,
布氏
PS:我会发送一张显示问题的图片,但我没有足够高的声誉。
答案 0 :(得分:1)
错误是大小的规格,在三个地方(边距,内容宽度和内容高度)的FO中没有单位。此外,上述评论中所述的SVG高度为100,超过了绿色圆圈的一半。
纠正这些并仅显示FO:
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="A4-portrait">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4-portrait">
<fo:flow flow-name="xsl-region-body">
<fo:block>
<fo:instream-foreign-object xmlns:svg="http://www.w3.org/2000/svg">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="600" height="200">
<circle cx="50" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
<circle cx="100" cy="100" r="40" stroke="black" stroke-width="2" fill="green" />
</svg>
</fo:instream-foreign-object>
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
这会在输出中显示完整的SVG图像。