RTFテンプレートへのPDF分割の実装
この項では、RTFテンプレートから生成したレポートのPDF分割を有効化する方法を説明します。
このセクションでは、次のトピックについて説明します。
RTFテンプレートでのコマンドの入力
この機能を使用するテンプレートを設計する場合は、次の問合せを指定するコマンドを追加する必要があります。
-
データ内のどの要素が繰り返されるか(単純にfor-eachコマンドを使用します)
-
各PDFファイルでその要素が何回出現するか
-
インデックス・ファイルにはどのような情報(データ要素)を含めるか
これを行うには、テンプレート内のドキュメントを分割する要素のfor-eachループ内に次の2つのコマンドを入力する必要があります。
-
<?catalog-index-info:name;element_name?>
説明
nameは、インデックス・ファイルで各ドキュメントに含まれるジャンプ先およびジャンプ元のレコードを識別するために使用される名前です。
element_nameは、前述の手順で識別された名前の値を提供する要素のXMLタグ名です。
catalog-index-infoコマンドは、作成されるインデックス・ファイルの構造を定義します。
-
<?if:position() mod n = 0?><?document-split:?><?end if?>
説明
nは、1つのPDFファイルに含めるレコードの数です。
このコマンドは、カウントする要素のfor-eachループ内に配置する必要があります。このコマンドは、レコード数がn値と等しい場合に、次の改ページ後にドキュメントを分割するようPublisherに指示します。
ドキュメントの分割が実行されるたびに、catalog-index-infoコマンドで定義された名前と値の組合せがインデックス・ファイルに書き込まれます。
使用例 - 部門ごとの分割
この例は、次に示すXMLデータに基づいています。
この例は次のXMLデータに基づいています。
<DATA_DS>
<G_EMP>
<DEPARTMENT_NAME>Sales</DEPARTMENT_NAME>
<FIRST_NAME>Ellen</FIRST_NAME>
<LAST_NAME>Abel</LAST_NAME>
<HIRE_DATE>1996-05-11T00:00:00.000-07:00</HIRE_DATE>
<SALARY>11000</SALARY>
</G_EMP>
<G_EMP>
<DEPARTMENT_NAME>Sales</DEPARTMENT_NAME>
<FIRST_NAME>Sundar</FIRST_NAME>
<LAST_NAME>Ande</LAST_NAME>
<HIRE_DATE>2000-03-24T00:00:00.000-08:00</HIRE_DATE>
<SALARY>6400</SALARY>
</G_EMP>
<G_EMP>
<DEPARTMENT_NAME>Shipping</DEPARTMENT_NAME>
<FIRST_NAME>Mozhe</FIRST_NAME>
<LAST_NAME>Atkinson</LAST_NAME>
<HIRE_DATE>1997-10-30T00:00:00.000-08:00</HIRE_DATE>
<SALARY>2800</SALARY>
</G_EMP>
<G_EMP>
<DEPARTMENT_NAME>IT</DEPARTMENT_NAME>
<FIRST_NAME>David</FIRST_NAME>
<LAST_NAME>Austin</LAST_NAME>
<HIRE_DATE>1997-06-25T00:00:00.000-07:00</HIRE_DATE>
<SALARY>4800</SALARY>
</G_EMP>
...
</DATA_DS>
この例では、出力PDFレポートに各従業員のドキュメントが含められます。新しいPDFを部門ごとに生成します。PDFファイルに含まれている各レコードのFIRST_NAMEおよびLAST_NAMEのリストをインデックスに記録します。
この出力を実現するには、テンプレートに次のように入力します。
<?for-each-group:ROW;./DEPARTMENT_NAME?>
<?for-each:current-group()?>
<?catalog-index-info:'First Name';FIRST_NAME?>
<?catalog-index-info:'Last Name';LAST_NAME?>
...
<?end for-each?>
<?document-split:?>
<?end for-each-group?>