FOPの使用方法を説明したいと思います。FOPを使用するために、帳票出力などに出力するデータは、XML形式のデータでなくてはなりません。実際にXML形式で出力するとなると、DOMなどのXMLを扱うプログラムを利用しなければなりません。そのためのコストも余分にかかります。JAXBを利用することで、XMLを簡単に作成することができます。一般的な帳票の出力データ形式は、そんなに複雑なものではないはずです。ここでは、単一項目と、繰返し項目のデータを扱います。fax.xsdがそのためのXMLスキーマです。XMLスキーマは、XMLマスターベーシック試験より少し難しい程度で、この後にでてくるXSLTの部分に関しても、XMLマスターベーシック試験を取得している人なら難しくないはずです。(SyntaxHighlighterを使用して、XMLスキーマ、XSLT、Java、XMLを掲載しています。ブラウザー上で、各々の図の右上のアイコンをマウスでクリックすることで、ソースを表示したり、クリップボードにコピーしたり、印刷したりできます。注意点として、「さらに記事を読み込む」のリンクで、この記事を読み込んだ場合に、SyntaxHighlighterによる表示が不正になる場合がありますので、恐れ入りますが、タイトルをクリックして再表示して下さい。)2.帳票出力するまでの準備作業の流れXSL-FO文書の実サンプルの作成。XMLの様式とXMLスキーマの作成。JAXBによるクラス生成。XMLとXSLTから、XSL-FOドキュメントを作成して、帳票を作成するJavaプログラムの作成。XSL-FO文書の実サンプルを作成します。データのXMLの様式とXMLスキーマの作成をします。その後、XSL-FO文書の動的に変わる部分を、XSLTを使用して書き直します。XMLスキーマを元に、JAXBを使用してXMLとJavaオブジェクトをマッピングするクラスを作成します。生成されたクラスを使用してXMLデータを作成します。ここで示した流れ以外にもいろいろあると思いますが、これが一番わかりやすいと思います。PDF出力(クリックするとPDFを表示します。「合計金額(税込)」の11項目。「金額」の4項目で、合計15項目です。5.fax.xsdのXMLスキーマについて送信者と宛先の内容は共通化できるので、使用するXMLの型は共通となっています。送信者の方には、郵便番号がないので、29行目で、minOccurs=”0′′としています。複数出力の項目は、複数出力されるように、maxOccurs=”unbounded”としています。Edition)」にあるものが使用できます。XSLTでXpathの関数を用いて、金額から5%かけて消費税を求めても良かったのですが、消費税が変わったときに、XSLTも変更しないといけないので、XMLデータから消費税を取得しました。XMLデータから消費税率を取得して、XSLTで消費税を計算する方法もあると思います。XMLデータで取得したものを出力するか、XSLTで計算したものを出力するかは、ケースバイケースだと思います。47行目で、fo:table要素に、table-omit-footer-at-break=”true”を指定すると、フッターは繰り返されません。‘#,###’)の’#,###’は、3桁ごとにカンマを表示するという意味です。107行目で、fo:table-cell要素に、keep-together.within-column属性を追加して、その属性値にalwaysを指定しています。行が複数ページにまたがるのを防ぐためです。ない場合は、項番18の内容が複数ページに分割されます。119行目で、ループが最終行の場合、fo:table-cell要素に、属性値が、last-pageのid属性を追加しています。これは、23行目のfo:page-number-citation要素が参照していて、最終ページ番号を取得しています。FOPが、実際の出力時に、商品詳細の最後の部分がどのページ番号になるのかを計算してくれます。)市販の帳票作成ツールでは、表のソート機能がありますが、XSLTでも、xsl:sort要素を使用することでソートできます。102行目のxsl:for-eachの後に、xsl:sort要素を追加します。xsl:sort要素を複数追加した場合は、ソートキーは複数になります。font-size="12pt">下記の通り、ご請求申し上げます。</xsl:template></xsl:stylesheet>7.JAXBの使用方法fax.xsdのスキーマを元に、バインディングコンパイラxjcを用いてJavaのクラスに生成します。コマンドラインから実行する方法と、Eclipseから実行する方法を示します。●コマンドイランから実行する方法。スキーマファイル名を引数にしてxjcを呼び出すだけです。6以上に含まれています。カレントディレクトリのcom/wordpress/okulejp/faxフォルダに7つのファイルが生成されました。C:\Users\okule>●Eclipseから実行する方法。Classes...」を選択します。schema設定画面が表示されたら、「Finish」ボタンを押下します。8.Fax.javaについてXMLの要素名とJavaの型名が対応しているので、DOMに比べてXMLを作成するのが簡単で、それでいてXMLスキーマ違反になりにくいです。74から77行目で、XMLスキーマ検証を行っています。クラスパスにXSLTプロセッサのプロバイダが、クラスパス上に複数ある場合に、使用するXSLTプロセッサを指定できます。88と90行目で、Xalanを使う場合と、Saxonを使う場合が示されています。//TransformerFactoryクラスの実装を選択する。(明示しない場合は、プラットホームのデフォルトのものが使用される。//Xalanを使用する場合。//Saxonを使用する場合。Saxonは、XSLT2.0に対応。//入力XMLとXSLTから、XSL-FOドキュメントを作成する。//XSL-FOドキュメントから、PDFを作成する。fax.xml(Fax.javaで作成されたXML。Classesを生成すれば、XMLを意識することなく、Javaのsetterとgetterメソッドを用いて、XMLデータを作成するのがとても簡単なのがわかります。DOMによるXMLを作成したことがある人なら、すごく簡単にXMLを作成できることが実感できると思います。固定様式の帳票を作成するときの入力XMLデータの様式は、一定または、ほぼ一定であると思うので、XMLスキーマファイルを難なく作成できると思います。JAXBをEclipse上で簡単に利用できるので、XMLバインドツールの敷居が低くなったと思います。Eclipseでは、XMLスキーマ、XSLT2.0のコード補完機能が利用できるので開発効率が上がります。それに加えて、XMLスキーマを選択して、マウスで右クリックしてコンテキストメニューを表示し、XMLファイルを生成することができます。FOPのコード補完機能も利用できます。その1上記のサイトは、JAXBをより深く学ぶのに非常に役立ちます。いろいろなサイトを検索して探しましたが、一番わかりやすくて体系づけられて説明されています。その8」まであります。FP1(10.5.1)がリリースされました。10.1.2がリリースされました。使用に同意したとみなされます。