2013-06-22 39 views
-1

我想要在PDF中嵌入动态图表或图表,这些图表应该具有排序,钻取,分组,展开折叠等功能。我正在考虑的一个选项是在Flash SWF中创建动态图表从XML文件&然后嵌入此SWF以及XML文件在PDF中。我知道我们可以使用iText将SWF嵌入到PDF中。但是,如何在PDF中同时嵌入SWF & XML。这会工作吗?我的另一个问题是,除了SWF + XML组合之外,是否还有其他选项可以用来创建带有免费或低成本的动态图表或图形的PDF。 JasperReports或BIRT或Pentaho或FusionCharts可以实现吗?我可以在PDF中嵌入Dyanamic FusionCharts吗?动态图表或图表

感谢,

的Wap劳

+0

有可能与两者的iText和RenderX,这是两个工具,我用得最多。您可以嵌入任何交互式Flash内容。我使用Anychart,但Fusionchart也可以。我可以在一段时间后为你发布代码。必须挖掘出来。 –

回答

1

一注:请注意,富媒体的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