PDF レポートの作成

PDF レポートの作成

Platform 4.2 以上が必要


印刷出力の生成


Nexaweb 4.2.x は、アプリケーションのクライアントで表示されるテーブル全体の印刷出力を生成する機能があります。

Nexaweb では、Apache FOP (Formatting Objects Processor) を使用して、テーブルの全コンテンツの PDF ファイルを生成します。印刷出力を生成した後で、PDF リーダープラグインをブラウザで使用してそのファイルを表示および保存できます(Apache FOP は、W3C が勧告した XSL-FO (XML Style Sheet-Formatting Objects) の実装を一部使用しています)


印刷出力の生成


出力を生成するには、com.nexaweb.client.printservice クラスから使用可能な次のメソッドのいずれかを使用します。

  • printElement( Element, DocumentFormat )

  • printElement( String elementId, DocumentFormat )

これらのメソッドの詳細については、JavaDoc を参照してください。


また、 Nexaweb クライアントで、生成した PDF ドキュメントをホストする新しいブラウザ ウィンドウが開くので、Nexaweb クライアントを実行するブラウザでポップアップを有効にするよう設定します。これにより、この新しいブラウザ ウィンドウから出力ファイルを表示、印刷、または保存できます。


また、Nexaweb サービスコンソールを使用して、作成されたファイルの数や取得されたファイルの数など、PrintService のパフォーマンスデータを表示することもできます。


FOP で印刷出力を生成する仕組みについて

  • UI イベントは PrintMCO 呼び出しをトリガして、印刷する要素に渡します。

  • PrintMCO は要素を複製して、変換に必要な属性 (コンポーネントの幅や高さなど) を XSL:FO に挿入することによって前処理を行います。

  • PrintMCO は、印刷されるドキュメントに固有の ID を生成します。

  • PrintMCO は、ドキュメント ID、要素の XML、および PrintServlet へのドキュメント フォーマットを送信します。

  • PrintServlet は、XSLT を使用して要素を XSL:FO フォーマットに変換します。

  • PrintServlet は、XSL:FO ドキュメントを実際のドキュメントを生成する FOP ツールに送ります。

  • FOP ツールは、生成されたドキュメントをメモリ (または一時ファイル) に保存します。

  • PrintMCO は、指定したドキュメントを取得するために PrintServlet を要求する URL を使用して、新しいブラウザ ウィンドウを開きます。

  • PrintServlet はそのドキュメントをクライアントにストリームして、一時ファイルを削除するか、そのメモリ内のデータ構造を消去します。

  • ポップアップ ウィンドウにドキュメントが表示されます。


新しいクラス


Nexaweb では、この印刷サービスをサポートするために、次の新しいクラスがサーバーおよびクライアント API の両方に含まれています。

  • com.nexaweb.printing.DocumentFormat - ドキュメント フォーマット (例: PDF、PS、SVG など) の型保証された列挙を提供します。

  • com.nexaweb.printing.UnsupportedDocumentFormatException - printElement() の文字列バージョンが使用される場合に偽の文字列を拒否します。

また、サーバー API には、印刷出力動作のカスタマイズに使用できる、次の新しいインターフェイスとクラスが含まれています。

  • com.nexaweb.common.printing.FoRenderer - XSL:FO からドキュメントをレンダリングするためのインターフェイスです。

    • PrintedDocument renderFo( Element nxmlElement, InputStream xslStream, URIResolver xslResolver, DocumentFormat format, OutputStream docOutputStream ) は FoRenderingException をスローします。

  • com.nexaweb.common.printing.PrintedDocument - デバッグ機能が有効になっている場合に、印刷ドキュメント、ドキュメント フォーマット、および生成された XSL:FO をカプセル化するためのインターフェイスです。

    • InputStream getDocumentInputStream()

    • DocumentFormat getFormat()

    • Document getFoDocument()

  • com.nexaweb.common.printing.FoRenderingException - レンダリング プロセス中にエラーが発生するとスローされます。


Nexaweb 印刷サービスの設定


Nexaweb 印刷サービスをカスタマイズして、既存のレンダラクラスまたはスタイルシートを選択したり、独自に作成することができます。


Nexaweb 印刷サービスをカスタマイズするには、次の手順に従います。

  1. 別のレンダラを使用するには、独自のレンダラ クラスを次の方法で提供します。

    • Nexaweb Platform に付属する FOP ライブラリ (http://xmlgraphics.apache.org/fop/) を使用して記述する

    • 独自のライブラリを使用して、まったく新しいレンダラ ソリューションを記述する

  2. 別のスタイルシートを使用する場合は、XSL-FO から PDF ファイルを生成するために提供されている XSLT スタイルシートを編集するか、独自のスタイルシートを使用します。

  3. 次のセクションを nexaweb-server.xml のコンフィギュレーション ファイルに追加します。

    <printing-configuration>
     <fo-renderer class="com.nexaweb.common.printing.fop.FopProcessor"/>
     <printed-document-time-to-live> 30 sec </printed-document-time-to-live>
      <preprocess nxml> true </preprocess nxml>
      <nxml-to-fo-stylesheet>/Nexaweb/stylesheets/printing/main.xsl</nxml-to-fo-stylesheet>
     </printing-configuration>

    次の表では、これらのタグについて説明します。

セクション

説明

<fo-renderer class=
"com.nexaweb.common.printing.fop.FopProcessor" />

fo-renderer は、com.nexaweb.common.printing.FoRenderer インターフェイスを実装するレンダラ クラスの名前を定義します。このインターフェイスは、com.nexaweb.xml.Element オブジェクトを印刷出力に変換します。このクラスには、デフォルトのコンストラクタが必要です。

printed-document-time-to-live>30 sec</printed-document-time-to-live>

サーバーで生成されるドキュメントにはそれぞれ寿命があります。次の条件のいずれかに該当するドキュメントは、サーバーで削除されます。

  • クライアントが印刷ドキュメントを一度取得する

  • ドキュメントの生存期間が既に経過している

この設定により、サーバーのリソースが確実に解放されます。

<preprocess-nxml>true</preprocess-nxml>

Nexaweb のデフォルトの XML->XSL-FO または XSL-FO 実装には、出力を元の表示と一致させるためにXML ソースの前処理を行う必要があります。したがって、Nexaweb のデフォルトの実装では、このエントリが true に設定されていなければなりません。ただし、他のレンダラの場合は、レンダラ自体によって前処理が行われます。この場合、このエントリを false に設定すると、前処理をオフにすることができます。

: 一部の前処理は、クライアントサイドで行う必要があります。これには、特定の要素の幅、高さ (xy)、色の値、テーブルの順序などの解決が含まれます。また、cdata タグがセルのテキストを初期化する場合は、セル要素から変換されます。

<nxml-to-fo-stylesheet>
/Nexaweb/stylesheets/printing/main.xsl
</nxml-to-fo-stylesheet>

入力された XML データから XSL-FO XML データへの変換に使用されるスタイルシートの場所を指定します。このようなスタイルシートを編集することも、新しいスタイルシートの場所を指定することもできます。


トラブルシューティング

  • スタイルシートを編集する場合は、慎重に行ってください。XSL-FO によって変換が正しく行われないと、最終ファイルが破損します。

  • Apache FOP のベータ版は、WebLogic 7 と JRE (1.3) では動作しません。

  • Apache Tomcat 5.0.3.0 を JDK 5 (1.5) と併用する場合は、xml-apis.jar を Tomcat の endorsed フォルダから削除する必要があります。

  • 標準装備さ れている印刷サポート機能 (PDF 形式での印刷) は、Apache FOP の実装に依存しており、PDF ファイルをサーバー上で生成します。生成されるファイルのサイズによっても異なりますが、FOP ライブラリとファイル生成の両方により、サーバーでのメモリ使用量が増加します。