Graphics」タグのアーカイブ

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のEclipseコード補完設定(コンテンツアシスト)   1 comment

Apache FOPのEclipseのコード補完設定(コンテンツアシスト)が可能です。
コード補完設定(コンテンツアシスト)には、fop.xsdが必要です。fop.xsdは、ソースアーカイブに含まれています。

ソースアーカイブのダウンロードサイト
Apache FOP: Downloading A Distribution

                   1.下記の動画は、Apache FOPのEclipseコード補完設定(コンテンツアシスト)方法が説明されている動画です。

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

SVGを利用したデータ可視化のためのグラフ作成   1 comment

データ可視化のためのグラフ作成を考えていて、検索サイトで調べたら、大変すばらしいグラフ作成機能を持つccchartというJavaScriptグラフライブラリィを見つけました。
下記サイトを見てもらうとわかりますが、数学的センスを感じずにはいれませんでした。またデザインセンスもとても良いと思います。大げさですが、こんなにすばらしいグラフをWEB上で実現できるとは驚きです。
ccchart(高橋 登史朗氏作成)     http://jsgt.org/c/

似たようなことをSVGで表現してみました。下のグラフは画像リンクです。画像自体はPNG形式ですが、リンク先でSVG形式の表示ができます。リンク先のソースを見てもらえば、SVGのグラフ作成は、そんなに難しくないと思います。(wordpressでは、SVGタグを使えないため、リンク先での表示になりました。またフィルター処理を行っているのでfirefoxまたは、chromeでご覧下さい。また棒グラフの棒には、ツールチップ表示するようになっています。)

下記のリンクは、FOPのバイナリ配布に含まれるサンプルプログラムの「ExampleSVG2PDF.java」を使用して直接SVGからPDF化しました。Apache FOPを使用してXSL-FOを経由してもSVG画像をPDFにできますが、フィルター処理のものをPDFにすると正しく表示されませんので注意が必要です。
棒グラフのSVGをベクター形式で埋め込んだPDF   http://okule.files.wordpress.com/2012/07/bar_chart1.pdf
(PDFで拡大表示してもきれいに表示される。)

BatikSVG Rasterizerツールでも、PDF化できますが、SVG Rasterizerツールが使用する、pdf-transcoder.jarの実装バージョンが、1.0beta2なので、PDFファイルの文書プロパティ→概要→詳細情報のPDF変換のところが、「Apache FOP Version 1.0beta2: PDF Transcoder for Batik」となるので注意が必要である。FOPのバイナリ配布に含まれるサンプルプログラムの「ExampleSVG2PDF.java」を使用すれば、「Apache FOP Version SVN tags/fop-1_0: PDF Transcoder for Batik」になります。

SVGでグラフを表現する最大の利点の一つは、ブラウザー上で拡大表示しても画質が崩れないことです。拡大してもきれいに表示されます。目の良いお客様ばかりではないので重要なことです。またグラフがとてもこまかいときに、助かります。二つ目は、XML形式なのでテキストエディタで直に作成・修正できることです。三つ目は、バイナリー形式ではなく、XML形式なので、プログラムから生成することが比較的容易であることです。

SVGを利用したグラフ作成は、データウェアハウスの情報分析ツールに応用できると思います。お客様のデータウェアハウスから、このようなグラフを作成できたら面白いと思いますし、お客様に喜んでいただけると思います。データ可視化を実現する上で、SVGによるグラフ作成は、とても重要な武器になると思います。次期IE10では、SVG フィルター処理が、標準でサポートされますので非常に楽しみです。

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

okule による SVG, XML への投稿 (7月 16, 2012)

タグ: , , , , ,