Xslt 如何使用ApacheFop防止我的内容被切断?

Xslt 如何使用ApacheFop防止我的内容被切断?,xslt,xsl-fo,apache-fop,Xslt,Xsl Fo,Apache Fop,我正在学习ApacheFOP快速入门。在命令行中,我将转换一个包含svg元素的简单xml文件,并将其转换为pdf文件。我能够做到这一点,但是svg生成的图像被切断了。我不熟悉XSL-FO和ApacheFOP,但我确实查阅了w3c的属性文档。不幸的是,现在我更困惑了。我尝试了以下几点,但没有成功:更改svg本身的宽度和高度属性;在简单页面母版元素中将页面高度和页面宽度设置为“自动”;消除保证金属性。我没有看到任何指示区域主体以某个默认大小开始的内容 以下是xml: <chart> &l

我正在学习ApacheFOP快速入门。在命令行中,我将转换一个包含svg元素的简单xml文件,并将其转换为pdf文件。我能够做到这一点,但是svg生成的图像被切断了。我不熟悉XSL-FO和ApacheFOP,但我确实查阅了w3c的属性文档。不幸的是,现在我更困惑了。我尝试了以下几点,但没有成功:更改svg本身的宽度和高度属性;在简单页面母版元素中将页面高度和页面宽度设置为“自动”;消除保证金属性。我没有看到任何指示区域主体以某个默认大小开始的内容

以下是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>

图像应该显示一个红色和绿色重叠的圆圈,但它只显示绿色圆圈的左上角。我希望我丢失的块元素中有一个属性,但我不知道是哪个。我看这个块的大小限制在100px x 100px

我缺少哪些属性,如何才能使整个svg图像正确显示(两个完整的圆圈重叠)

谢谢

勃兰特


PS:我本来会发送一张显示问题的图片,但我没有足够高的声誉。

错误是在三个位置(边距、内容宽度和内容高度)的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图像。

错误是在三个位置(边距、内容宽度和内容高度)的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图像。

甚至不需要测试。。。我看到这个:content width=“600”content height=“300”300什么?pts、inches、miles……完全从技术上讲,您展示的SVG的高度设置为100。它有一个绿色的圆,圆心从100100开始,半径为40。你永远不会看到圆的下半部分,永远不会。甚至没有测试。。。我看到这个:content width=“600”content height=“300”300什么?pts、inches、miles……完全从技术上讲,您展示的SVG的高度设置为100。它有一个绿色的圆,圆心从100100开始,半径为40。你永远不会看到圆的下半部分,永远不会。