2010年2月22日月曜日

Eclipse Plugin - FOP Bridge

たぶんあるだろうと思って探したら、やっぱりありました。
Apache FOPに対応するEclipseプラグイン。
http://www.ahmadsoft.org/fopbridge.html

まだ使っていないので、試したら報告します。
ただ、Eclipse重いのであまり使いたくない、というのがホンネ。

XSLファイルのD&Dでポコっとpdfが出てくると理想なんですが。
なんだか、この世界で知らないことが多すぎて、すぐ見つけられるのに見逃しているだけな気がします。

日本語フォント:自動化の必要性

Apache FOPで、日本語フォントを使用するための操作について調べているところですが、比較的手間を要する作業のようです。

ttf:フォントファイル単体で読み込みが可能
ttc:フォントメトリクスの生成が必要

なにやら面倒な操作ですが、フォントのインポート関係は仕様変更が予定されているそうです。
次期バージョンに期待、というところでしょう。

それにしても、Apache FOPは導入が簡単な割に、コンパイルの方が面倒ですね。
ここはアプリケーションでサクっと自動化できるはずなんですが…

どこかに落ちてないものでしょうかね(笑

プログラムに組み込んで使っている方はチラホラ見かけるのですが…

Apache FOPで"ようこそ!":TTFを使う

前回、Apache FOPで"Hello world!"と書かれたpdfが出力できることを確認しました。
そこで今回は、同様に"ようこそ!"と表示してみます。

Apache FOPは、デフォルトのままでは日本語フォントに対応していません。
そこで、設定用のXMLファイルを用意します。

今回は一番簡単な、TTFファイルを使用するパターンを解説します。

jpfont.xml
<?xml version="1.0" ?>
<fop version="1.0">
  <renderers>
    <renderer mime="application/pdf">
      <fonts>
        <font embed-url="C:\windows\fonts\simhei.ttf">
          <font-triplet name="JpFont" weight="normal" style="normal" />
        </font>
      </fonts>
    </renderer>
  </renderers>
</fop>


※ SimHeiは実際には中国語フォントですが、Windows標準でTTF形式の日本語対応フォントはSimHeiしか用意されていないようです。もし他にTTF形式の日本語フォントがあれば、そちらを使用しても構いません。

font-tripletタグのname属性は、任意の名前に設定が可能です。

次に、文書の本体であるXSLファイルを変更します。

welcome.xsl
<?xml version="1.0" encoding="Shift_JIS"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

 <fo:layout-master-set>
  <fo:simple-page-master  master-name="A4"
                          page-width="210mm" page-height="297mm">
   <fo:region-body region-name="xsl-region-body"  margin="2cm"/>
  </fo:simple-page-master>
 </fo:layout-master-set>

 <fo:page-sequence  master-reference="A4">
  <fo:flow flow-name="xsl-region-body">
   <fo:block font-family="JpFont">ようこそ!</fo:block>
  </fo:flow>
 </fo:page-sequence>

</fo:root>

前回の内容から変更した箇所を太字にしています。
最初の行にあるencording属性は、実際のXSLファイルのエンコーディングに合わせて変更してください。

どちらのファイルもfop.batのフォルダの直下に保存してあるものとします。
今回は追加設定ファイル(XML)を読み込む必要があるので、-cオプションを使います。

fop welcome.xsl welcome.pdf -c jpfont.xml

で実行してください。

"ようこそ!"

確認できましたか?

2010年2月18日木曜日

Apache FOPで"Hello World!"

Apache FOPがインストールできましたので、定番のHello world!をやってみましょう。

まず、XSLファイルを作ります。
今回はwikipediaからサンプルを拝借します。
http://ja.wikipedia.org/wiki/XSL_Formatting_Objects

helloworld.xsl
<?xml version="1.0"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

 <fo:layout-master-set>
  <fo:simple-page-master  master-name="A4"
                          page-width="210mm" page-height="297mm">
   <fo:region-body region-name="xsl-region-body"  margin="2cm"/>
  </fo:simple-page-master>
 </fo:layout-master-set>

 <fo:page-sequence  master-reference="A4">
  <fo:flow flow-name="xsl-region-body">
   <fo:block>Hello world!</fo:block>
  </fo:flow>
 </fo:page-sequence>

</fo:root>

Windowsの場合

インストールの項で解凍したファイルの中に"fop.bat"があります。
これをコマンドプロンプトで実行します。
fop.batのあるフォルダまで移動して

fop 入力ファイル名 出力ファイル名

このコマンドでXSLをPDFに変換できます。
今回はfop.batが"C:\fop"にあるとして話を進めます。

簡単のため、helloworld.xslを"C:\fop"の直下に置きます。
コマンドプロンプトに

cd "C:\fop"

と入力し、ディレクトリを移動します。次に

fop helloworld.xsl helloworld.pdf

と入力します。

すると、C:\fop\helloworld.pdfが生成されます。

Apache FOPのインストール

XMLからPDFを作成するために必要なApache FOPをインストールします。

Apache FOPは、XSL-FOという印刷レイアウトを決めるためのメタ言語を、PDFやPS、PNGなどに変換することができるJavaアプリケーションです。
The Apache XML Graphics Projectのサイト内からダウンロードできます。
http://xmlgraphics.apache.org/fop/

バイナリのバージョンをダウンロードします。
http://xmlgraphics.apache.org/fop/download.html

Binary Downloadの項から、FOP Distribution mirrorをクリックします。
いくつかのリンクが表示されるので、適当なミラーを選びます(一番上が無難でしょう)。
2010年2月18日時点で最新版は0.95とのことですから、binaries→fop-0.95-bin.zipを選択します。

ダウンロードしたら、適当な場所に解凍します。

おそらく既にインストールされているとは思いますが、Apache FOPはJavaアプリケーションです。
Javaアプリケーションを動かすためにはJREが必要ですので、万が一ない場合はインストールが必要です。
http://www.java.com/ja/download/

これでインストールが完了しました。

はじめに

ちょっと初めての挑戦で何を書けば良いのやら、という感じですが…
まずは、このブログを作ったキッカケを。

私は、とある大学の工学部で学生をやっています。
このブログを見ているということは、ご存知の方が多いとは思いますが、この世界、論文をはじめとして、何かと文書を書く機会が多いのです。

実は先日、論文を提出したばかりでして。
そこで使っていたのが、組版ソフトとしてはあまりにも有名なTeXというやつです。
蓄積された技術やリソースがあり、業界標準として信頼されているとは思うのですが

正直嫌いなんです。TeXが。

これほどにHTMLで書かれたテキストが世界中に溢れているのに、なぜ印刷物に限って、あんな古臭い書式を使っているのだろうか。
きっと、XMLの組版ソフトだってあるだろ、と思って調べたわけですが、ソフトが無料じゃなかったり、入門サイトが無かったりしてあまりにも取っ付きが悪い。

チクチクと調べた結果、XSLというメタ言語があるという事が判明しました。
しかもpdf化のためのパッケージが、私に馴染みのあるJavaで実装されているとのこと。
これなら何とか使えるかもしれない、と思ったわけです。
しかし、あまりにも情報が少ない。
そこで備忘録をブログにしておけば、情報が集まってくるんではなかろうかと。

私のスペックは
・テキストエディタだけで満足なHTMLが書ける
・C言語とJavaでプログラミングを経験
・TeXはテンプレート拾ってきて書いた程度
というところです。

この分野に詳しい方、ぜひ助け舟を…
というか、その前に詳しいサイトがあったら教えてください(笑