2013-06-22 87 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