一注:请注意,富媒体的PDF为PDF 1.7(可扩展),因此只使用Adobe Reader工作9+(不推荐10,因为它在这一个bug功能从未修复过)。
第一个答案是使用RenderX,因为我为RenderX工作,这很容易。这是一个模板XSL,可用于插入所谓的RichMedia注释。
你可能有这样的文件,一些XML:
<chart swf="SWF\Anychart.swf" flashvar="XMLData" width="300" height="300">
<anychart>....</anychart> <!-- put the XML for the chart here -->
<resources>
<resource src="img\a.png"/>
</resources>
</chart>
你可以从这些得到拨打以下的模板。
的这里的参数是:
chartxml:自我解释
Flash变量:的Flash变量命令到XML传递给SWF驱动图表
宽度和高度的XML文件。对于AnyChart的,这是“XMLDATA”为FusionCharts的,这是“dataXML”
@swf:在这个模板,这是路径的实际SWF文件(如 “SWF'Anychart.swf”或“SWF \ Bar2D.swf “
资源:通过图表所需的任何其他外部资源或映射或什么(如图片)
<xsl:template name="add-on.richmedia">
<xsl:param name="chartxml"/>
<xsl:param name="width"/>
<xsl:param name="height"/>
<xsl:param name="flashvar"/>
<fo:block>
<rx:rich-media-object scaling="non-uniform" name="test" width="{concat($width,'pt')}" height="{concat($height,'pt')}" content-width="scale-to-fit" content-height="scale-to-fit" transparency="true">
<xsl:attribute name="src">
<xsl:value-of select="@swf"/>
</xsl:attribute>
<rx:flash-var name="{$flashvar}" content="true">
<xsl:apply-templates select="$chartxml" mode="copy-of"/>
</rx:flash-var>
<xsl:for-each select="resources/resource">
<rx:rich-media-resource>
<xsl:attribute name="src">
<xsl:text>url('</xsl:text>
<xsl:value-of select="@src"/>
<xsl:text>')</xsl:text>
</xsl:attribute>
<xsl:attribute name="name">
<xsl:value-of select="@src"/>
</xsl:attribute>
</rx:rich-media-resource>
</xsl:for-each>
</rx:rich-media-object>
</fo:block>
</xsl:template>
这将插入块与一个RX您的FO文件:富媒体对象RenderX处理链接PDF内相关资产(图表XML和任何资源)的所有内部结果,其中包含一个交互式Flash图表当格式化为PDF格式时。还有其他方法可以做到这一点。你甚至可以插入闪光灯,并使用“XMLfile”(用于Anychart)或“dataurl”作为FUsioncharts,并将数据的URL(如http://mychartserver.com/getdata)或任何其他内容填入PDF中,并在每次打开时向PDF提供动态数据。
对于iText,在他们的网站上有完美的样品,而不是在这里发布更多。看看这个链接,它显示了在Java中所有的代码插入SWF和数据集需要:
http://itextpdf.com/examples/iia.php?id=300
有可能与两者的iText和RenderX,这是两个工具,我用得最多。您可以嵌入任何交互式Flash内容。我使用Anychart,但Fusionchart也可以。我可以在一段时间后为你发布代码。必须挖掘出来。 –