xsl:fo如何包含动态生成的svg

时间:2013-05-10 10:24:46

标签: svg apache-fop

我想生成一个svg图表并使用apache fop将其插入到pdf中。到目前为止,我已尝试使用

<fo:instream-foreign-object xmlns:svg="http://www.w3.org/2000/svg">
    <xsl:value-of select="svgData"/>
</fo:instream-foreign-object>

在xsl文件中,生成的svg在“svgData”中保存为字符串。这种方法不起作用,因为它不解析字符串svg数据并只是附加它。

我如何实现这一目标?我需要在java中创建svg(baitk?)并将其添加到pdf中。

2 个答案:

答案 0 :(得分:0)

我花了很多时间解决这个问题。没有成功。我的建议是不要再采用这种方法。

将动态SVG转换为PDF的方法如下。 将SVG保存在硬盘上,并记住对象中的文件名/路径。 然后使用文件名填充外部图形src属性。 创建PDF后,必须删除svg文件。

完成。

XSL:

<xsl:template match="qandapair">
   <fo:block text-align="center">
       <fo:external-graphic src="{chart}"/>
   </fo:block>
</xsl:template>

XML:

     <qandapair>
         <chart>gaoejTLVfcBUrCgjvmsWgjBwQzHYmYYJ.svg</chart>
     ...
     </qandapair>

答案 1 :(得分:0)

我花了一些时间来解决这个问题。最终,我可以通过使用<xsl:copy-of>而不是<xsl:value-of> +并使用带前缀的命名空间来使它工作。

<fo:block>
  <fo:instream-foreign-object content-type="content-type:xml/svg"
                              xmlns:svg="http://www.w3.org/2000/svg">
    <xsl:copy-of select="/path/to/svg:svg"/>
  </fo:instream-foreign-object>
</fo:block>