Apache FOPのTIFF出力の方法   2 comments

1.はじめに
今日は、Apache FOPの機能を利用した、TIFF出力について説明したいと思います。システム開発において、FAX送信機能を実現するにあたり、TIFFイメージが必要なときがあると思います。Apache FOPを利用することで、同じXSL-FO文書を流用して、PDFだけでなく、TIFFも出力できます。

2.環境設定

  1. Javaライブラリのインストール
    TIFFの圧縮方式のCCITT T.4 (Fax Group 3)及び、CCITT T.6 (Fax Group 4)には、 Java Advanced Imaging Image I/O Toolsが必要です。下記からダウンロードできます。Apache FOPの公式サイトのJava Advanced Imaging Image I/O Toolsへのリンク先が古いので、見つけるのに苦労しました。
    (jai_imageio-1_0_01-lib-windows-i586-jdk.exeを実行すれば、「jdkインストールフォルダ\jre\lib\ext」にjai_imageio.jarがインストールされます。jai_imageio-1_0_01-lib-windows-i586-jre.exeを実行すれば、「jreのインストールフォルダ\lib\ext」にjai_imageio.jarがインストールされます。)
    Java Advanced Imaging Image I/O Toolsのダウンロードサイトへ
  2. 圧縮方式は、<compression>タグの内容で指定します。詳細は、TIFF-specific Configurationに掲載されています。またfop.xconfファイルは、Apache FOPの公式サイト Archive Downloadのbinariesまたは、sourceに含まれています。
    図 1. fop.xconfの修正部分(下記の例は、CCITT T.6です。)

    <renderer mime="image/tiff">
      <transparent-page-background>true</transparent-page-background>
      <compression>CCITT T.6</compression>
    </renderer>
    
  3. PDFの日本語フォント設定は、<fonts>タグに、<auto-detect/>タグを追加するだけで、日本語フォントが使用できます。使用できるフォントは、Type 1 FontとTrueType Fontです。詳細は、Basic font configurationに掲載されています。
    図 2. fop.xconfの修正部分

    <renderer mime="application/pdf">
      <filterList>
        <value>flate</value>
      </filterList>
      <fonts>
        <auto-detect/>
      </fonts>
    </renderer>
    

3.JavaプログラムにおけるTIFF出力
ExampleFO2PDF.javaの修正例 (ExampleFO2PDF.javaは、Apache FOPの公式サイト Archive Downloadのbinariesまたは、sourceに含まれています。)

  1. 67行目の「FOUserAgent foUserAgent = fopFactory.newFOUserAgent();」の後に、「fopFactory.setUserConfig(new File(“fop.xconf”));」を追加します。
  2. 77行目の「Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);」のMIME_PDFをMIME_TIFFに修正します。
  3. 128行目の「File fofile = new File(baseDir, “xml/fo/helloworld.fo”);」のファイル名を修正します。
  4. 130行目の「File pdffile = new File(outDir, “ResultFO2PDF.pdf”);」のファイル名を修正します。

4.使用したXSL-FO文書
http://www7b.biglobe.ne.jp/~okule/okule/wordpress/FAX/fax.foからダウンロードできます。

5.実際の出力結果 (Chrome バージョン 23.0.1271.97 mで画像が、正しく表示されません。原因を調査中。)
図 3. TIFF出力 圧縮形式はCCITT T.6 (クリックするとTIFFをダウンロードまたは表示します。またマルチTIFFファイルなので、Windows フォトビューアーでご覧下さい。ペイントでは1ページ目しか表示できません。)

図 4. PDF出力(クリックするとPDFを表示します。)

6.fax.foのXSL-FO文書の解説

  1. 出力結果の項番18のセルは、fo:table-cell要素に、keep-together.within-column=”always”を指定しないと、複数ページに分割されます。
  2. ヘッダーは、項番、商品名、数量、単価、金額です。フッターは、合計、消費税、合計(税込)です。fo:table要素に、table-omit-footer-at-break=”true”を指定すると、フッターは繰り返されません。
  3. フッターには、fo:table-cell要素に、列の結合数を示す、number-columns-spanned属性と、行の結合数を示す、number-rows-spanned属性を使用しています。備考という文字は、結合されたセルに表示されています。
  4. 16行目の<fo:page-number-citation ref-id=”last-page” />は、id属性がlast-pageのものを参照していて、id属性がlast-pageである要素の実際のページ数を示しております。この例の場合は、466行目のfo:table-cell要素が出力されるページ数を示しております。このようにして、全体のページ数を取得するとができます。

7.総評
自動組版ソフトの便利さを感じるところは、セルの高さをセルの内容に応じて調節してくれることです。これは、固定様式の帳票では、実現がかなり難しいと思います。今日は、実際にApache FOPを使用するにあたって役立ちそうなXSL-FOの使用テクニックをいくつか紹介しました。ここで紹介したテクニックは、XSL-FOのほんの一部分でしかありません。まだまだ、いろいろなてテクニックがあります。みなさんも一緒に学んでいきましょう。

©中條勝徳 and okulejp.com, 2012.

okule による FOP, XML への投稿 (8月 2, 2012)

タグ: , , , , , , ,

Apache FOPのTIFF出力の方法」への2件のフィードバック

RSS でコメントを購読する

  1. ピンバック: Apache FOPの可能性と日本語設定 « okulejp

  2. ピンバック: JAXB2.0を利用したApache FOPの使用方法 « okulejp

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。