2013-06-22 2 views
-1

Я хочу встроить динамические диаграммы или графики в PDF, которые должны иметь возможность сортировать, развернуть, группировать, развернуть сбой и т. Д. Один из вариантов, о котором я думаю, заключается в создании динамических диаграмм в Flash SWF из файла XML & затем вставьте этот SWF, а также файл XML в формате PDF. Я понимаю, что мы можем встроить SWF в PDF с помощью iText. Однако как встроить SWF & XML в одно и то же время в формате PDF. Будет ли это работать? Мой другой вопрос заключается в том, есть ли какие-либо опции, кроме SWF + XML-комбо, которые я могу использовать для создания PDF-файлов с динамическими диаграммами или графиками, доступными бесплатно или по низкой цене. Возможно ли это с JasperReports или BIRT или Pentaho или FusionCharts? Могу ли я встраивать dyanamic FusionCharts в PDF?Динамические диаграммы или графики в PDF

Спасибо,

Wap Рау

+0

можно как с IText и RenderX, эти два инструмента, которые я использую больше всего. И вы можете встроить практически любой интерактивный Flash-контент. Я использую Anychart, но Fusionchart также работает. Я могу отправить код для вас немного. Придется выкопать его. –

ответ

1

Одно примечание: Имейте в виду, что RichMedia в PDF является PDF 1.7 с расширениями и, следовательно, работает только с Adobe Reader 9+ (10 не рекомендуется, так как это есть ошибка в этом которая никогда не была исправлена).

Первый ответ используется RenderX, так как я работаю для RenderX, это легко. Вот шаблон XSL, который можно использовать для вставки так называемой RichMedia Annotation.

Вы можете иметь некоторые 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: команда FlashVar передать XML в SWF. Для 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> 

Это вставить блок в документ FO с гм:. богатыми медиа-объект RenderX обрабатывает все внутренние элементы связи связанных активов (XML и любые ресурсы) внутри PDF. Результатом является интерактивная флеш-карта внутри do cument при форматировании в PDF. Есть и другие способы сделать это. Вы даже можете вставить флеш-память и использовать «XML-файл» (для Anychart) или «dataurl» для FUsioncharts и поместить URL-адрес в данные (например, http://mychartserver.com/getdata) или что угодно, и подавать динамические данные в PDF каждый раз, когда он открыт.

Для iText на вашем сайте есть идеальные образцы, а не размещение здесь. Посмотрите на эту ссылку, он показывает весь код в Java требуется вставить SWF и набор данных:

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