0

並べ替え、ドリルダウン、グループ化、展開折りたたみなどの機能を備えた動的チャートまたはグラフを PDF に埋め込みたいと考えています。私が考えている 1 つのオプションは、XML ファイルから Flash SWF で動的チャートを作成し、この SWF を次のように埋め込むことです。および PDF の XML ファイル。iText を使用して PDF に SWF を埋め込むことができることを理解しています。ただし、PDFにSWFとXMLを同時に埋め込む方法。これは機能しますか?もう 1 つの質問は、SWF + XML コンボ以外に、無料または低コストで利用できる動的チャートまたはグラフを含む PDF を作成するために使用できるオプションがあるかどうかです。これは、JasperReports、BIRT、Pentaho、または FusionCharts で可能ですか? ダイナミック FusionCharts を PDF に埋め込むことはできますか?

ありがとう、

ワップ・ラウ

4

1 に答える 1

1

注意: PDF の Richmedia は拡張子付きの PDF 1.7 であるため、Adobe Reader 9 以降でのみ動作することに注意してください (この機能にはバグが修正されていないため、10 は推奨されません)。

最初の答えはRenderXを使用することです。私はRenderXで働いているので、これは簡単です。これは、リッチメディア アノテーションと呼ばれるものを挿入するために使用できるテンプレート XSL です。

次のようなファイルに 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: グラフを駆動する XML ファイル

幅と高さ: 一目瞭然

flashvar: XML を SWF に渡す FlashVar コマンド。Anychart の場合、これは「XMLData」です。Fusionchart の場合、これは「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:rich-media-object を使用して FO ドキュメントにブロックが挿入されます。RenderX は、PDF 内の関連付けられたアセット (チャート XML および任意のリソース) をリンクする内部のすべてを処理します。PDF にフォーマットすると、ドキュメント内にインタラクティブな Flash チャートが表示されます。これを行う他の方法もあります。フラッシュを挿入して "XMLfile" (Anychart の場合) または "dataurl" を FUsioncharts に使用し、データへの URL ( http://mychartserver.com/getdataなど) などを入力して、動的データを PDF にフィードすることもできます。開くたびに。

iText の場合、ここに投稿するのではなく、サイトに完璧なサンプルがあります。このリンクを見てください。SWF とデータ セットを挿入するために必要な Java のすべてのコードが示されています。

http://itextpdf.com/examples/iia.php?id=300

于 2013-06-22T17:46:57.023 に答える