// class MyPageEvent implements the PdfPageEvent interface MyPageEvent event = new MyPageEvent(); writer.setPageEvent(event);PdfPageEvent インターフェイスは、次のメソッドを含んでいるので、作成した MyPageEvent クラスでこれらを実装しなければなりません。
- public void onOpenDocument(PdfWriter writer, Document document);
- public void onCloseDocument(PdfWriter writer, Document document);
- public void onStartPage(PdfWriter writer, Document document);
- public void onEndPage(PdfWriter writer, Document document);
- public void onParagraph(PdfWriter writer, Document document, float paragraphPosition);
- public void onParagraphEnd(PdfWriter writer,Document document,float paragraphPosition);
- public void onChapter(PdfWriter writer,Document document,float paragraphPosition, Paragraph title);
- public void onChapterEnd(PdfWriter writer,Document document,float paragraphPosition);
- public void onSection(PdfWriter writer,Document document,float paragraphPosition, int depth, Paragraph title);
- public void onSectionEnd(PdfWriter writer,Document document,float paragraphPosition);
- public void onGenericTag(PdfWriter writer, Document document, Rectangle rect, String text);
文書が開かれ、最初のページが初期化されると、onOpenDocument
メソッドと最初の
onStartPage メソッドが呼び出されます。onOpenDocument
は、ほとんどの場合ページイベントの実装で使われるパラメータの初期化に使われます。onStartPage
は、新しいページの初期化が終わるたびに呼び出されます。onEndPage
は、新しいページの初期化が始まる前に呼び出されます。これは、ヘッダやフッタを追加する最もよい方法です。onStartPage
メソッドでヘッダやフッタを追加することは、各種の奇妙な効果が発生する(例えば、不必要な空白のページが文書の最後にできてしまう)ので推奨しません。onCloseDocument
メソッドは、すべてのストリームが閉じられる前に呼び出されます。これは、'page X of Y'
で示されるようなフッタがあるような場合に、テンプレートへ総ページ数を埋める理想的な場所です。 Y
の正確な値は、文書を閉じる前にしかわかりません。これらのメソッドの実装においては、イベントによって引き起こされた Writer
のインスタンスにかかる
Document
オブジェクトのが得られます。これは、構造化されたコンテンツを加えたオブジェクトとは異なります。これは、隠された
PdfDocument オブジェクトです。このオブジェクトのメソッドのうち呼び出すことができるものは、限られています。
段落を加えるときに、現在のページ上でのY座標を知りたいこともある。下の例では、しおりを自動的に追加していることがわかるだろう。アウトラインツリーのいずれのエントリーも段落の最初の場所を指し示している。このアウトラインツリーは、onParagraph
イベントで生成されている。段落の後ろに、なにかのオブジェクトを絶対位置で追加する必要があるときは、onParagraphEnd
メソッドを使うだけです。
onChapter、onSection、onChapterEnd、onSectionEnd
の各メソッドは同じですが、はじめの二つは、章あるいは節のタイトルを渡しています。これは、(下の'Romeo
and Juliet'の例のような)ヘッダやフッタを設定するためや、目次を構築するために使うことができます。
Headers and footers in an EndPage event: see endpage.pdf
この例では、ヘッダーとフッターを加えるだけではありません。'page X of Y' を表示するフッターにテンプレートを使っています。全ページ数を onCloseDocument イベントで PdfTemplate に加えています。見て解るように、透かしは onStartPage で加えることもできますが、onEndPage でもできます。(各ページのテキストの周りに四角形も描画しています。)
Making a document with a header containing 'page x of y' and with a watermark on every page.: see pageNumbersWatermark.pdf
External resources for this example: logo.gif
Using paragraph events: see bookmarks.pdf
Speaker クラスは、すべての発言者それぞれを追跡するためにあります。ページイベントの実装を見ればわかるように、onGenericTag メソッドにおいて発言者のリストが更新されます。onOpenDocument メソッドで初期化の処理をし、onChapter メソッドで現在の演技を追跡し、この情報を文書の偶数ページにヘッダとして追加し、onPageEnd メソッドで 'page X of Y'-フッタを書き込み、最後に、onCloseDocument メソッドでこの Y の値を設定します。文書の解析が終了した後に、イベントクラスの出力から発言者のアルファベット順リストを取り出し、この情報を含む追加のページを加えます。
Using PageEvents: see RomeoJuliet.pdf
External resources for this example: tagmapRomeoJuliet.xml playRomeoJuliet.xml
Extra jars needed in your CLASSPATH: crimson.jar