イメージとチャートの挿入
Publisherでは、公開ドキュメントにイメージを挿入するために様々な方法がサポートされています。
次の各項では、これらのオプションについて説明します。
イメージの直接挿入
jpg、gifまたはpngイメージをテンプレートに直接挿入します。
BLOBデータから取得したイメージのレンダリング
BLOBとして格納されたイメージをフォームに含めることができます。
結果のXMLにデータベースでBLOBとして保存されていたイメージ・データが含まれる場合は、テンプレートに挿入され、実行時にイメージを表示するフォーム・フィールドで次の構文を使用します。
<fo:instream-foreign-object content-type="image/jpg">
<xsl:value-of select="IMAGE_ELEMENT"/>
</fo:instream-foreign-object>
説明
image/jpgは、イメージのMIMEタイプです(他のオプションとしてimage/gifとimage/pngもあります)。
および
IMAGE_ELEMENTは、XMLデータのBLOBの要素名です。
イメージには、高さと幅の属性を指定して、発行レポートのイメージのサイズを設定できます。イメージは、定義したボックス・サイズに合せて表示されます。たとえば、前述の例のサイズを3x4インチに設定するには、次のように入力します。
<fo:instream-foreign-object content-type="image/jpg" height="3 in" width="4 in">
<xsl:value-of select="IMAGE_ELEMENT"/>
</fo:instream-foreign-object>
次のようにピクセルを使用して指定します。
<fo:instream-foreign-object content-type="image/jpg" height="300 px" width="4 px">
...
cmも使用できます。
<fo:instream-foreign-object content-type="image/jpg" height="3 cm" width="4 cm">
...
あるいは、元のディメンションに対するパーセントで指定できます。
<fo:instream-foreign-object content-type="image/jpg" height="300%" width="300%">
...
テンプレートへのチャートの追加
チャートをテンプレートに追加するには、次のステップに従います。
チャートをテンプレートに追加するステップの概要は次のとおりです。これらのステップは、この項で例を使用して詳細に説明します。
- ダミー・イメージをテンプレートに挿入して、チャートのサイズと位置を定義します。
- ダミー・イメージの「Alternative text」ボックスに、チャートの定義を追加します。チャートの定義にはXSLコマンドが必要です。
- 実行時に、Publisherは、チャート・エンジンをコールしてイメージをレンダリングします。このイメージは、最終出力ドキュメントに挿入されます。
RTF出力がラスター・イメージに制限されていることに注意してください。PDFとHTMLの出力は、ラスター・イメージとベクトル・イメージをサポートしています。
サンプル・チャートの追加
サンプル・チャートを追加する方法は、次の図を参照してください。
次の例は、会社の部門別に売上合計を表示するXMLデータの一部です。
<sales year=2004>
<division>
<name>Groceries</name>
<totalsales>3810</totalsales>
<costofsales>2100</costofsales>
</division>
<division>
<name>Toys</name>
<totalsales>2432</totalsales>
<costofsales>1200</costofsales>
</division>
<division>
<name>Cars</name>
<totalsales>6753</totalsales>
<costofsales>4100</costofsales>
</division>
<division>
<name>Hardware</name>
<totalsales>2543</totalsales>
<costofsales>1400</costofsales>
</division>
<division>
<name>Electronics</name>
<totalsales>5965</totalsales>
<costofsales>3560</costofsales>
</division>
</sales>
この例は、チャートをテンプレートに挿入し、次の棒グラフのような縦棒グラフとして表示する方法を示しています。
このチャートの次の属性に注目してください。
-
形式は垂直棒グラフです。
-
チャートの背景にはグリッドが表示されています。
-
各コンポーネントはカラーで表示されています。
-
売上合計はY軸ラベルで表示されています。
-
各部門はX軸ラベルで表示されています。
-
チャートにタイトルが付いています。
-
チャートに凡例が表示されています。
各プロパティは、個別のレポート要件にあわせてカスタマイズできます。
ダミー・イメージの挿入
最初のステップでは、テンプレートのチャートを表示する位置にダミー・イメージを追加します。
このイメージ・サイズによって、最終的なドキュメントにおけるチャート・イメージの大きさが定義されます。
ノート:
ダミー・イメージは「図」として挿入してください。これ以外の種類のオブジェクトは使用できません。次の図に、ダミー・イメージの例を示します。
繰返しデータに基づいてチャートを出力に繰返し表示する場合は、他のフォーム・フィールドと同様に、イメージをfor-eachループ内に埋め込むことができます。この例のチャートは、sales yearグループ内で定義されているため、XMLファイルに存在するデータの年度ごとに生成されます。
イメージを右クリックして「Format Picture」パレットを開き、「Web」タブを選択します。「代替テキスト」入力ボックスを使用して、チャート特性を定義するコードとチャートのデータ定義を入力します。
「代替テキスト」ボックスへのコードの追加
「代替テキスト」ボックスは、コード(最終的なドキュメントにチャートとしてレンダリングされる内容)を示すテキスト・フィールドです。
次の図に、「図の書式設定」の「代替テキスト」ボックスにおけるPublisherコードの例を示します。
「代替テキスト」の内容は、最終的なドキュメントでレンダリングされるチャートを表します。このチャートの場合、テキストは次のとおりです。
chart:
<Graph graphType = "BAR_VERT_CLUST">
<Title text="Company Sales 2004" visible="true" horizontalAlignment="CENTER"/>
<Y1Title text="Sales in Thousands" visible="true"/>
<O1Title text="Division" visible="true"/>
<LocalGridData colCount="{count(//division)}" rowCount="1">
<RowLabels>
<Label>Total Sales $1000s</Label>
</RowLabels>
<ColLabels>
<xsl:for-each select="//division">
<Label>
<xsl:value-of select="name"/>
</Label>
</xsl:for-each>
</ColLabels>
<DataValues>
<RowData>
<xsl:for-each select="//division">
<Cell>
<xsl:value-of select="totalsales"/>
</Cell>
</xsl:for-each>
</RowData>
</DataValues>
</LocalGridData>
</Graph>
チャート・テキストの最初の要素はchart:要素にして、後続のコードでチャート・オブジェクトが記述されていることをRTFパーサーに通知する必要があります。
次の要素は開始の<Graph>
タグです。コード全体が<Graph>
要素のタグ内にあることに注意してください。この要素には、チャート・タイプを定義するためのgraphType
属性があります。この属性が宣言されていない場合、デフォルトのチャートは垂直棒グラフです。BI Beansでは、多数の異なるチャート・タイプをサポートしています。この項では、それ以外のタイプも使用しています。チャート・タイプの完全リストは、BI BeansのグラフDTDのドキュメントを参照してください。
次のコード・セクションは、チャート・タイプと属性を定義します。
<Title text="Company Sales 2004" visible="true" horizontalAlignment="CENTER"/>
<Y1Title text="Sales in Thousands" visible="true"/>
<O1Title text="Division" visible="true"/>
これらの値をすべて宣言するか、実行時にXMLデータから値を置換できます。たとえば、次の構文を使用すると、XMLタグからチャート・タイトルを取得できます。
<Title text="{CHARTTITLE}" visible="true" horizontalAlighment="CENTER"/>
ここで、CHARTTITLEはチャート・タイトルを含むXMLタグ名です。タグ名が中カッコで囲まれていることに注意してください。
次のセクションは、列ラベルと行ラベルを定義します。
<LocalGridData colCount="{count(//division)}" rowCount="1">
<RowLabels>
<Label>Total Sales $1000s</Label>
</RowLabels>
<ColLabels>
<xsl:for-each select="//division">
<Label>
<xsl:value-of select="name"/>
</Label>
</xsl:for-each>
</ColLabels>
LocalGridData
要素には、colCount
とrowCount
の2つの属性があります。これらの属性は、実行時に表示する列と行の数を定義します。この例では、count関数でレンダリングする列の数を計算します。
colCount="{count(//division)}"
rowCount
は1にハードコードされています。この値は、チャートの対象になるデータのセット数を定義します。この例では1です。
その次のコードは、行と列のラベルを定義します。これらのラベルを宣言するか、または実行時にXMLデータから値を置換できます。行ラベルはチャートの凡例で使用されます(この例では「Total Sales $1000s」)。
この例では、列ラベルがGroceries、Toys、Carsなどのデータから抽出されています。これは、for-eachループを使用して実行されます。
<ColLabels>
<xsl:for-each select="//division">
<Label>
<xsl:value-of select="name"/>
</Label>
</xsl:for-each>
</ColLabels>
このコードは、<division>
グループをループし、<name>
要素の値を<Label>
タグに挿入します。実行時に、このコードにより、次のXMLが生成されます。
<ColLabels>
<Label>Groceries</Label>
<Label>Toys</Label>
<Label>Cars</Label>
<Label>Hardware</Label>
<Label>Electronics</Label>
</ColLabels>
次のセクションは、チャート対象の実際のデータ値を定義します。
<DataValues>
<RowData>
<xsl:for-each select="//division">
<Cell>
<xsl:value-of select="totalsales"/>
</Cell>
</xsl:for-each>
</RowData>
</DataValues>
ラベルのセクションと同様に、このコードはデータをループして、BI Beansのレンダリング・エンジンに渡されるXMLを生成します。このコードでは、次のXMLが生成されます。
<DataValues>
<RowData>
<Cell>3810</Cell>
<Cell>2432</Cell>
<Cell>6753</Cell>
<Cell>2543</Cell>
<Cell>5965</Cell>
</RowData>
</DataValues>
チャート・サンプルの追加
データを円グラフに表示する方法を理解するには、サンプルの円チャートを参照してください。
前述のデータは、次の図に示すように、円グラフでも表示できます。
次に、実行時にこのチャートをレンダリングするためにテンプレートに追加されたコードを示します。
chart:
<Graph graphType="PIE">
<Title text="Company Sales 2004" visible="true"
horizontalAlignment="CENTER"/>
<LocalGridData rowCount="{count(//division)}" colCount="1">
<RowLabels>
<xsl:for-each select="//division">
<Label>
<xsl:value-of select="name"/>
</Label>
</xsl:for-each>
</RowLabels>
<DataValues>
<xsl:for-each select="//division">
<RowData>
<Cell>
<xsl:value-of select="totalsales"/>
</Cell>
</RowData>
</xsl:for-each>
</DataValues>
</LocalGridData>
</Graph>
横棒グラフのサンプル
この例では、売上合計と売上原価を横棒グラフで表示します。ここでは、売上原価要素(<costofsales>
)のデータもチャートに追加されています。
次に、このチャートをテンプレートに定義するコードを示します。
chart:
<Graph graphType = "BAR_HORIZ_CLUST">
<Title text="Company Sales 2004" visible="true" horizontalAlignment="CENTER"/>
<LocalGridData colCount="{count(//division)}" rowCount="2">
<RowLabels>
<Label>Total Sales ('000s)</Label>
<Label>Cost of Sales ('000s)</Label>
</RowLabels>
<ColLabels>
<xsl:for-each select="//division">
<Label><xsl:value-of select="name"/></Label>
</xsl:for-each>
</ColLabels>
<DataValues>
<RowData>
<xsl:for-each select="//division">
<Cell><xsl:value-of select="totalsales"/></Cell>
</xsl:for-each>
</RowData>
<RowData>
<xsl:for-each select="//division">
<Cell><xsl:value-of select="costofsales"/></Cell>
</xsl:for-each>
</RowData>
</DataValues>
</LocalGridData>
</Graph>
2番目のデータ・セットに対応するため、LocalGridData
要素のrowCount
属性が2に設定されています。また、DataValues
セクションでは、売上合計と売上原価の2つのデータ・セットが定義されている点にも注意してください。
チャートの外観の変更
チャートの外観の変更には、BI BeansのグラフDTDの多くの属性を操作に使用できます。
たとえば、次の図に示すように、前述のチャートでは、グリッドの削除、背景のグラデーションの配置、および棒の色やフォントの変更が可能です。
この変更をサポートするコードは次のとおりです。
chart:
<Graph graphType = "BAR_HORIZ_CLUST">
<SeriesItems>
<Series id="0" color="#ffcc00"/>
<Series id="1" color="#ff6600"/>
</SeriesItems>
<O1MajorTick visible="false"/>
<X1MajorTick visible="false"/>
<Y1MajorTick visible="false"/>
<Y2MajorTick visible="false"/>
<MarkerText visible="true" markerTextPlace="MTP_CENTER"/>
<PlotArea borderTransparent="true">
<SFX fillType="FT_GRADIENT" gradientDirection="GD_LEFT"
gradientNumPins="300">
<GradientPinStyle pinIndex="1" position="1"
gradientPinLeftColor="#999999"
gradientPinRightColor="#cc6600"/>
</SFX>
</PlotArea>
<Title text="Company Sales 2004" visible="true">
<GraphFont name="Tahoma" bold="false"/>
</Title>
. . .
</Graph>
棒の色はSeriesItemsセクションに定義されています。色は、次に示すように16進形式で定義されます。
<SeriesItems>
<Series id="0" color="#ffcc00"/>
<Series id="1" color="#ff6600"/>
</SeriesItems>
次のコードは、チャートのグリッドを非表示にします。
<O1MajorTick visible="false"/>
<X1MajorTick visible="false"/>
<Y1MajorTick visible="false"/>
<Y2MajorTick visible="false"/>
MarkerText
タグは、データ値をチャートの棒上に配置します。
<MarkerText visible="true" markerTextPlace="MTP_CENTER"/>
PlotArea
セクションは背景を定義します。SFX
要素はグラデーションを設定し、borderTransparent
属性はプロット境界を非表示にします。
<PlotArea borderTransparent="true">
<SFX fillType="FT_GRADIENT" gradientDirection="GD_LEFT"
gradientNumPins="300">
<GradientPinStyle pinIndex="1" position="1"
gradientPinLeftColor="#999999"
gradientPinRightColor="#cc6600"/>
</SFX>
</PlotArea>
Title text
タグは、新規のフォント・タイプとサイズを指定するように更新されています。
<Title text="Company Sales 2004" visible="true">
<GraphFont name="Tahoma" bold="false"/>
</Title>