Apache FOP にさわる2

作成 2002/10/21

日本語フォントを使ってみる

FOPではデフォルトで数種類のフォントが用意されています。 デフォルトのフォント以外のフォントを使いたい(FOPに追加したい)場合、 例えば日本語のMS明朝が使いたいとかいう場合は、 ちょっとした環境設定が必要になります。

環境設定の手順はこんな感じです。

  1. font metricsファイルの作成
  2. userconfig.xmlの編集
  3. userconfig.xmlを指定して実行

font metricsファイルの作成

font metricsファイルというのは、Font情報を記述したxmlファイルです。 作成するには、org.apache.fop.fonts.appsパッケージのツールを使います。

FOPに追加できるフォントはType1フォントとTrue Typeフォントです。
(Type1とTrue Typeってよく知りませんが、 http://www.net.intap.or.jp/oiia/cont1/p0302.html%7B0recid=10367.html によると、世界標準の2大アウトラインフォントらしい)

ここではWindowsに標準で付いてるTrue Typeフォントを例に話を進めます。 MS明朝をFOPに組み込んでみましょう。

True Typeフォントは、うちの環境(Windows XP)の場合、 C:\WINDOWS\Fonts に入ってます。 .ttf、.ttcという拡張子のファイルがたくさん入っています。 ttfがTrue Type Fontで、 ttcの方はTrue Type FontのCollection(複数入ったもの)ではないかと思われます(たぶん)。

コマンドラインで、org.apache.fop.fonts.apps.TTFReaderを使って、 True Typeのコレクションファイルmsmincho.ttcから font metricsファイルmsmincho.xml を作ってみましょう。

C:\apps\fop-0.20.4>java -cp build/fop.jar;lib/xerces.jar;lib/xalan.jar;lib/batik.jar 
org.apache.fop.fonts.apps.TTFReader -ttcname "MS Mincho" C:/WINDOWS/Fonts/msmincho.ttc msmincho.xml
(実際は一行)

userconfig.xmlの編集

confディレクトリのuserconfig.xmlを編集します。

以下のような記述をします。デフォルトのuserconfig.xmlに 日本語フォント記述のサンプルがあるので、それをコピーして 書き換えればいいかなと思います。

 <font metrics-file="msmincho.xml" embed-file="C:\windows\fonts\msmincho.ttc" kerning="yes">
    <font-triplet name="Mincho" style="normal" weight="normal"/>
    <font-triplet name="Mincho" style="normal" weight="bold"/>
    <font-triplet name="Mincho" style="italic" weight="normal"/>
    <font-triplet name="Mincho" style="italic" weight="bold"/>
 </font>

userconfig.xmlを指定して実行

日本語フォントを使ったfoを用意しましょう。

jp.fo(hello.foの以下だけ編集)

      <fo:block font-size="18pt" text-align="center"
            font-family="Mincho">
        はろーFOP
      </fo:block>

FOPを実行します。 このとき、-cオプションでuserconfig.xmlを指定します。

C:\apps\fop-0.20.4>fop -c conf/userconfig.xml jp.fo jp.pdf

日本語もちゃんと出てますね〜。

ちなみに、このあたりの基本的な情報は、FOPドキュメントのfontsのところに書いてます。

userconfig.xmlを指定して実行(組み込み)

Javaプログラムから実行する場合も簡単です。 以下のようにOptionsを使います。
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

import org.apache.fop.apps.Driver;
import org.apache.fop.apps.Options;
import org.xml.sax.InputSource;

public class JpFont {

  public static void main(String[] args) throws Exception{

    InputSource foFile = new InputSource("jp.fo");
    OutputStream out = new FileOutputStream("jp.pdf");

    //これだけでstaticなコンフィグ設定になるらしい
    File userConfigFile = new File("userconfig.xml");
    Options options = new Options(userConfigFile);

    Driver driver = new Driver(foFile, out);
    driver.setRenderer(Driver.RENDER_PDF);
    driver.run();
  }
}

組み込みの場合、userconfig.xmlの metrics-fileの指定をフルパスで指定しないとうまく動きませんでした。 このあたりはまだちょっと不安定なとこかも。。。

プリンタに印刷してみる

FOから作成したPDFをプログラム上から印刷したい場合があります。 そんなことできるのかなぁと思っていたら、サンプルありました。 これです。

docs/examples/embedding/PrintServlet.java

Java Print APIを通して印刷しているようです。

サーブレットコードをアプリケーションに直して 試してみたら、プリンタにウィーンと印刷されました。 あまりにもサンプルそのままなので、ソースはここに書きませんが、 動くことは確認しました。


次へ
TOP