ヘッダーをスキップ

Oracle Fusion Middleware Oracle Business Intelligence Publisherレポート・デザイナーズ・ガイド
リリース11g (11.1.1)
部品番号 B63038-01
目次へ移動
目次
前のページへ移動
次のページへ移動

大きな出力ファイルを処理する技術

この付録では、次の項目について説明します。

大きなPDF出力ファイルを処理する技術

ここでは、レポートからサイズの非常に大きなPDF出力ファイルを生成するときのパフォーマンスを向上する技術について説明します。この章で説明する技術は次のとおりです。

静的コンテンツの再利用

この項では、PDFレポート出力で静的コンテンツを繰り返し再利用して全体的なPDFファイルのサイズを削減する方法について説明します。この項の内容は次のとおりです。

静的コンテンツの再利用とは

レポートに静的コンテンツがあり、レポート内でのコンテンツの位置も決まっている場合(たとえば、米国W-2フォーム裏面の説明文など)、このBI Publisherの機能を使用して、生成するPDFファイルのサイズを削減できます。

W-2フォームを例にあげると、レポートには次の出力が予期されます。

この図についてはドキュメントのテキストで説明しています

各従業員には、固有の内容がレンダリングされますが、それぞれの裏面(または2ページ目)には、同一の説明が記載されています。

この一連の説明は、再利用可能な静的コンテンツとして定義できます。コンテンツを再利用可能な静的コンテンツとして指定すると、BI Publisherによって、その静的コンテンツを含むPDFドキュメントが一度だけ生成され、必要時に他の位置から参照されます。これにより、全体的な出力ファイルのサイズが削減されます。

この機能の制約

この機能には次の制約があります。

RTFテンプレートでの再利用コンテンツの定義

再利用する静的コンテンツを使用するには、次のようにテンプレート内で次のタグを使用してコンテンツを囲みます。

<?reusable-static-content:?>

....ここに静的コンテンツを記述...

<?end reusable-static-content?>

これらのタグを静的コンテンツの前後に挿入することで、生成するファイルにこのコンテンツを1回のみ記述して、出現箇所ごとに同じ位置から参照するように指定します。

使用例

次の例は、この機能の実装を示しています。サンプル・レポートは、従業員ごとに1回生成されます。生成されたレポートの最初のページには従業員固有の情報が記載され、内容の同じ説明が毎回裏面に印刷されます。各従業員の後にセクション区切りが発生し、ページ番号がリセットされます。

このテンプレートの構造を次に示します。

この図についてはドキュメントのテキストで説明しています

Zip圧縮されたPDF出力の生成

BI PublisherではPDF出力の生成時、出力ファイルのサイズが制限されません。ただし、ファイルのサイズが2GBに近づくと、Adobe Acrobat Readerではファイルを開いたり処理したりできなくなる場合があります。

BI Publisherには、大きなPDF出力ファイルを小さく管理しやすいファイルに分割する機能があります。分割後もレポートは1つの論理的なユニットとして整合性が維持されます。

レポートのPDF出力の分割を有効にすると、そのレポートは複数のファイルに分割され1つのZIPファイル内に生成されます。出力タイプはPDFZです。これらのコンポーネント・ファイルに簡単にアクセスできるように、BI Publisherによってインデックス・ファイルも生成され、各コンポーネントのPDFファイルに含まれるジャンプ先およびジャンプ元の要素が指定されます。

レポート設計者は、この機能を有効にするために、この項で説明されている方法でレポートを設定する必要があります。

制約と前提条件

設計時の考慮事項

レポート設計者は、レポートの分割を有効化するために、次の事項を決定する必要があります。

出力タイプの選択

テンプレートとレポート定義にアップロードした後に、出力タイプとしてZip圧縮PDFを有効にします。

この図についてはドキュメントのテキストで説明しています

レポートをスケジューリングするときは、出力タイプにPDFZを選択します。

この図についてはドキュメントのテキストで説明しています

RTFテンプレートへのPDF分割の実装

この項では、RTFテンプレートから生成したレポートのPDF分割を有効化する方法を説明します。内容は次のとおりです。

RTFテンプレートでのコマンドの入力

テンプレートを設計してこの機能を使用するとき、次の項目を指定するコマンドを追加する必要があります。

これを行うには、テンプレート内のドキュメントを分割する要素のfor-eachループ内に次の2つのコマンドを入力する必要があります。

使用例 - 部門ごとの分割

この例は次の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?>

PDFテンプレートへのPDF分割の実装

このセクションでは、出力を複数のPDFファイルに分割するためにPDFテンプレートで必要なコマンドを説明します。

PDFテンプレートでのコマンドの入力

PDFテンプレートでこの機能を有効化するには、テンプレート内の次の3つのフォーム・フィールドに「ツールチップ」フィールドで指定されたコマンドを入力します。

フォーム・フィールド名 ツールチップのコマンド
REPEAT-ELEMENT <?repeat-element:element name?>
各要素の説明は次のとおりです。
element_nameは、カウントする繰返し要素のXMLタグ名です。
例:
<?repeat-element:emp_id?>
CATALOG-INDEX-INFO <?catalog-index-info:'Name';element_name?>
各要素の説明は次のとおりです。
Nameは、element_nameに指定したインデックス・ファイル内で表示されるラベル名です。インデックスでは、Zip化される各ファイルに対してFromおよびToのリストが生成されます。
例:
<?catalog-index-info:'Last Name';LAST_NAME?>
データ要素をインデックス・ファイル内に複数回含めるために、catalog-index-infoコマンドを複数回指定できます。
SPLIT-COUNT <?split-count:n?>
各要素の説明は次のとおりです。
nは、新規ファイルの作成をトリガーするrepeat-elementの出現回数です。
例:
<?split-count:10000?>