当前位置: 首页 > 知识库问答 >
问题:

我如何才能避免我的内容被apache fop切断?

易书
2023-03-14

我正在浏览Apache FOP快速入门。从命令行,我将一个包含svg元素的简单xml文件转换成pdf文件。我可以做到这一点,但由svg生成的图像被切断。我不熟悉XSL-FO

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

图像应该显示红色

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

谢谢,

勃兰特

附言:我会发一张图片来展示这个问题,但是我没有足够高的声誉。

共有1个答案

顾高扬
2023-03-14

误差是大小的规范,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 图像。

 类似资料:
  • 我只想有一个,将工作簿的内容写入应用程序中的文件中,并在此 excel 中创建多个工作表。我正在使用Apache POI来读取/写入我的excel。我有以下方法这样做 - 我在这里面临的问题是,每次我调用时,都会创建一个新文件,并且存量数据会被覆盖。我只想要一个文件,并且需要将新的工作表添加到我现有的文件中。我如何实现这一点?

  • 问题内容: 运行gui时,我必须调整窗口大小以显示所有内容。有人知道问题出在哪里吗? 问题答案: 在添加所有组件之后并在调用setVisible(true)之前,在JFrame上调用pack()。

  • 在使用LabelPropagation时,我经常遇到此警告(这应该是一个错误,因为它完全无法传播): /usr/local/lib/python3.5/dist-packages/sklearn/semi_supervised/label_propagation。py:279:RuntimeWarning:true_divit自身中遇到无效值。label_distributions_/=标准化器

  • 问题内容: 我通过遵循一些pygame教程来学习Python 。 在其中我发现了关键字 self的 广泛使用,并且主要来自Java背景,我发现自己一直忘记键入 self 。例如,代替我输入,因为对我来说, rect 已经是该类的成员变量。 Java的并行的我能想到的这种情况是有前缀成员变量的所有引用与 此 。 我是否在所有成员变量前面都加上了 self 前缀,还是有一种方法可以声明它们,而不必这样

  • 我的python Cloud函数每秒引发大约0.05个内存错误-每秒调用大约150次。我感觉我的函数留下了内存残差,一旦实例处理了许多请求,就会导致实例崩溃。为了使函数实例在每次被调用时不会占用“更多的分配内存”,您应该做或不应该做什么?我被指向文档,了解到我应该删除所有临时文件,因为这是在内存中编写的,但我认为我没有编写任何文件。 我函数的代码可以总结如下。 全局上下文:在Google云存储上获

  • 我收集了2k份文件。我已经实现了分页,所以一次可以得到10个文档。文档如下所示: 要获取前10个元素,我使用以下查询: 要获得接下来的10个文档,我使用: 第一次打开应用程序时,我会滚动3页,这样总共会向缓存中添加30个文档。第二次打开应用时,我不想再次下载文档。由于我有字段,我可以查询: 这将返回所有新的/修改的文档,这很糟糕,因为如果添加了200个文档,我会为它们付费。换句话说,我花了200次