DocBookで文系論文を書いてみる 2日目
- 2008-01-11
- カテゴリ: その他のプログラミング
- タグ: ○○で文系論文を書いてみる Tips XML XSL DocBook Apache FOP Xalan
前回は、Apache FOPを入れて、簡単なXML文書をPDFにするところまでで終わった。今日は日本語フォントを導入してみようと思う。
日本語ではここのサイトが非常に参考になるが、情報がやや古い。フォントに関しては、Apache FOPのサイトの「Apache FOP: Fonts」に詳しい情報が載っているので、これを参考にした。
導入したフォント
FOPでは、XML形式のFont Metricsファイルというものを用意しないといけない。FOPにはフォントファイルからFont Metricsファイルを生成するツールが同梱されているので、それを使ってfont metricsファイルを作成する。フォント形式はType1とTrueTypeに対応しているとのこと。
今回は、以下の10種類のTrueTypeフォントを導入した。
- MS系
-
フォント名 フォントファイル名 MS 明朝 msmin04.ttc MS P明朝 msmin04.ttc MS ゴシック msgoth04.ttc MS Pゴシック msgoth04.ttc MS UI Gothic msgoth04.ttc
- IPAフォント
-
フォント名 フォントファイル名 IPA明朝 ipam.ttf IPA P明朝 ipamp.ttf IPAゴシック ipag.ttf IPA Pゴシック ipagp.ttf IPA UIゴシック ipagui.ttf
IPAフォントのファイルは、IPAのサイトから手に入れることができる。MS系のフォントは、C:\WINDOWS\Fontsに入っている。(MS系フォントのファイル名の語尾に'04'が入っているのはJIS2004対応版ということか?)
とりあえず、これらのフォントファイルをfontsというフォルダに入れておいた。
フォルダ構成
前回はフォルダ構成の話をすっ飛ばしてしまったのだが、FOPはApacheFOPというフォルダにしてCドライブ直下に置いてある。そして、上記のfontsフォルダはApacheFOPの直下に置いておいた。これからはその前提で話を進める。
Font Metricsの作成
TrueTypeフォントからFont Metricsファイルを生成するためには、FOPに付属しているTTFReaderというツールを使う。詳しいことは「Apache FOP: Fonts」に書いてあるが、拡張子が.ttf(TrueType Font)のファイルと.ttc(TrueType Collections)のファイルとでは扱いが異なる。.ttcファイルには複数のフォントが入っているので、どのフォントを変換するのかを-ttcnameオプションで指定してやらなければいけないらしい。
.ttf
面倒なのでまずは.ttfファイルのほうから説明する。コマンドプロンプトを開いて、カレントディレクトリをC:\ApacheFOPに移したら、以下のコマンドを叩く。(IPA明朝の場合。実際には改行は無い)
java
-cp build/fop.jar;lib/avalon-framework-4.2.0.jar;lib/commons-logging-1.0.4.jar;lib/commons-io-1.3.1.jar
org.apache.fop.fonts.apps.TTFReader fonts/ipam.ttf fonts/ipam.xml
つまり、CLASSPATHを指定してJavaのTTFReaderを呼び出し、入力ファイルと出力ファイル名を引数で指定してやるということ。Apache FOPのサイトでは、
java -cp build\fop.jar;lib\avalon-framework.jar;lib\commons-logging.jar;lib\commons-io.jar
org.apache.fop.fonts.apps.TTFReader [options]
C:\myfonts\cmr10.ttf ttfcm.xml
のようなコードが紹介されているが、avalon-framework.jarなどのファイル名はバージョン番号までつけて正確に入力しないと動かないので注意が必要。
僕は面倒なので↓のようなバッチファイルを作り、fontsフォルダ上で実行して一気に変換を終わらせてしまった。
set CP=../build/fop.jar;../lib/avalon-framework-4.2.0.jar;../lib/commons-logging-1.0.4.jar;../lib/commons-io-1.3.1.jar set TTF=org.apache.fop.fonts.apps.TTFReader java -cp %CP% %TTF% ipag.ttf ipag.xml java -cp %CP% %TTF% ipamp.ttf ipamp.xml java -cp %CP% %TTF% ipam.ttf ipam.xml java -cp %CP% %TTF% ipagui.ttf ipagui.xml java -cp %CP% %TTF% ipagp.ttf ipagp.xml
.ttc
.ttcファイルを変換する場合は、-ttcnameオプションを使って↓のようにフォント名を指定してやらなければいけない。
...TTFReader -ttcname "MS Mincho" msmin04.ttc MSMincho.xml
-ttcnameを使わずに、
...TTFReader msmin04.ttc MSMincho.xml
とやると、msmin04.ttcに含まれるフォント名の一覧が表示されるので、それを参考にフォント名を指定してやるとよい。こちらも.ttfと同じようにバッチファイルにしてしまった。
set CP=../build/fop.jar;../lib/avalon-framework-4.2.0.jar;../lib/commons-logging-1.0.4.jar;../lib/commons-io-1.3.1.jar set TTF=org.apache.fop.fonts.apps.TTFReader java -cp %CP% %TTF% -ttcname "MS Mincho" msmin04.ttc MSMincho.xml java -cp %CP% %TTF% -ttcname "MS PMincho" msmin04.ttc MSPMincho.xml java -cp %CP% %TTF% -ttcname "MS Gothic" msgoth04.ttc MSGothic.xml java -cp %CP% %TTF% -ttcname "MS PGothic" msgoth04.ttc MSPGothic.xml java -cp %CP% %TTF% -ttcname "MS UI Gothic" msgoth04.ttc MSUIGothic.xml
上の二つのバッチファイルを、C:\ApacheFOP\fontsに保存し、それぞれ実行すればMS系フォントとIPA系フォントのFont Metricsファイルが生成されるはず。意外と時間がかからない上に、ファイルサイズが小さいから驚く。
フォントの登録
Font Metricsファイルができたら、コンフィグファイルを作成してフォントを登録する。Font MetricsファイルとXSL-FOで指定するフォント名を対応させる作業である。
C:\ApacheFOP\conf\fop.xconfを見てみると、設定ファイルのお手本が書いてある(これを編集しても無意味)。このファイルと「Apache FOP: Configuration」を見れば作れるはずだが、簡単に言えば↓のように書けばいいらしい。
<font metrics-url="MSMincho.xml" embed-url="msmin04.ttc" kerning="yes"> <font-triplet name="MS 明朝" style="normal" weight="normal"/> <font-triplet name="MS 明朝" style="normal" weight="bold"/> <font-triplet name="MS 明朝" style="italic" weight="normal"/> <font-triplet name="MS 明朝" style="italic" weight="bold"/> </font>
ただし、font-baseをC:\ApacheFOP\fontsに指定しておかなければいけないが。それらのこともひっくるめて、僕が作成した設定ファイルが↓
<?xml version="1.0" encoding="UTF-8"?>
<fop version="1.0">
<base>.</base>
<font-base>C:\ApacheFOP\fonts</font-base>
<renderers>
<renderer mime="application/pdf">
<fonts>
<font metrics-url="MSMincho.xml" embed-url="msmin04.ttc" kerning="yes">
<font-triplet name="MS 明朝" style="normal" weight="normal"/>
<font-triplet name="MS 明朝" style="normal" weight="bold"/>
<font-triplet name="MS 明朝" style="italic" weight="normal"/>
<font-triplet name="MS 明朝" style="italic" weight="bold"/>
</font>
<font metrics-url="MSPMincho.xml" embed-url="msmin04.ttc" kerning="yes">
<font-triplet name="MS P明朝" style="normal" weight="normal"/>
<font-triplet name="MS P明朝" style="normal" weight="bold"/>
<font-triplet name="MS P明朝" style="italic" weight="normal"/>
<font-triplet name="MS P明朝" style="italic" weight="bold"/>
</font>
<font metrics-url="MSGothic.xml" embed-url="msgoth04.ttc" kerning="yes">
<font-triplet name="MS ゴシック" style="normal" weight="normal"/>
<font-triplet name="MS ゴシック" style="normal" weight="bold"/>
<font-triplet name="MS ゴシック" style="italic" weight="normal"/>
<font-triplet name="MS ゴシック" style="italic" weight="bold"/>
</font>
<font metrics-url="MSPGothic.xml" embed-url="msgoth04.ttc" kerning="yes">
<font-triplet name="MS Pゴシック" style="normal" weight="normal"/>
<font-triplet name="MS Pゴシック" style="normal" weight="bold"/>
<font-triplet name="MS Pゴシック" style="italic" weight="normal"/>
<font-triplet name="MS Pゴシック" style="italic" weight="bold"/>
</font>
<font metrics-url="MSUIGothic.xml" embed-url="msgoth04.ttc" kerning="yes">
<font-triplet name="MS UI Gothic" style="normal" weight="normal"/>
<font-triplet name="MS UI Gothic" style="normal" weight="bold"/>
<font-triplet name="MS UI Gothic" style="italic" weight="normal"/>
<font-triplet name="MS UI Gothic" style="italic" weight="bold"/>
</font>
<font metrics-url="ipam.xml" embed-url="ipam.ttf" kerning="yes">
<font-triplet name="IPA明朝" style="normal" weight="normal"/>
<font-triplet name="IPA明朝" style="normal" weight="bold"/>
<font-triplet name="IPA明朝" style="italic" weight="normal"/>
<font-triplet name="IPA明朝" style="italic" weight="bold"/>
</font>
<font metrics-url="ipamp.xml" embed-url="ipamp.ttf" kerning="yes">
<font-triplet name="IPA P明朝" style="normal" weight="normal"/>
<font-triplet name="IPA P明朝" style="normal" weight="bold"/>
<font-triplet name="IPA P明朝" style="italic" weight="normal"/>
<font-triplet name="IPA P明朝" style="italic" weight="bold"/>
</font>
<font metrics-url="ipag.xml" embed-url="ipag.ttf" kerning="yes">
<font-triplet name="IPAゴシック" style="normal" weight="normal"/>
<font-triplet name="IPAゴシック" style="normal" weight="bold"/>
<font-triplet name="IPAゴシック" style="italic" weight="normal"/>
<font-triplet name="IPAゴシック" style="italic" weight="bold"/>
</font>
<font metrics-url="ipagp.xml" embed-url="ipagp.ttf" kerning="yes">
<font-triplet name="IPA Pゴシック" style="normal" weight="normal"/>
<font-triplet name="IPA Pゴシック" style="normal" weight="bold"/>
<font-triplet name="IPA Pゴシック" style="italic" weight="normal"/>
<font-triplet name="IPA Pゴシック" style="italic" weight="bold"/>
</font>
<font metrics-url="ipagui.xml" embed-url="ipagui.ttf" kerning="yes">
<font-triplet name="IPA UIゴシック" style="normal" weight="normal"/>
<font-triplet name="IPA UIゴシック" style="normal" weight="bold"/>
<font-triplet name="IPA UIゴシック" style="italic" weight="normal"/>
<font-triplet name="IPA UIゴシック" style="italic" weight="bold"/>
</font>
</fonts>
</renderer>
</renderers>
</fop>
これを、my.xconfの名前で、C:\ApacheFOP\confの直下に保存しておいた。
テスト
以上で日本語ファイルの導入は完了である。今度から、FOPを呼び出すときに-cオプションで設定ファイルを指定してやれば、日本語のフォントを使うことができる。ためしに、↓のようなXSL-FOファイルをPDFに変換してみる。
<?xml version="1.0" encoding="utf-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="A4">
<fo: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" font-family="IPA明朝">
<fo:block font-size="20pt" font-family="IPAゴシック">タイトルはゴシックで</fo:block>
<fo:block font-size="10.5pt">本文は明朝で。</fo:block>
<fo:block font-size="10.5pt">やっぱ日本語使おうとするのが全ての苦労の始まりなんだよな。日本語じゃなくて英語だけで生きていけるくらいになればだいぶ楽になるのに。</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
これをPDFにするためには↓のコマンドを叩けばOK
fop -c C:\ApacheFOP\conf\my.xconf ja.fo ja.pdf
出来上がったPDFは↓

うん。いい感じだ。日本語フォントの導入は思ったより簡単に進んだな。
次は
これで、XML → XSL → PDFの変換環境はほぼ整った。次はDocBook XSLを導入して、DocBook形式のXMLをPDFに変換してみる。
でも今日は疲れたのでここまでー
トラックバックURL
- http://liosk.blog103.fc2.com/tb.php/71-a32860d8
0 件のトラックバック
3 件のコメント
-
こんにちは。
FOPを使って論文を書くなんて、しかも文系の方なのに、なんて奇特な…:-)
と思ったのでコメントさせていただきます。
(私も以前は、文系的な問題意識に理系的手法でアプローチする大学生でした)
FOPの設定は、いろいろのパスの設定が、面倒臭いですよね…。
これを他の人にも使わせたくて、私もいろいろと苦労しました…。
で、試行錯誤の結果、FOPと再配布可能なTrueTypeフォント一式を
設定済みの状態で、JavaWebStartを用いてクリック一発で
クライアント側に導入できるようなしくみを作ってみました。
(IPAフォントが再配布自由になったおかげで、実用的なものになりました…)
私は今、上記のしくみを使マークシート方式のアンケート用紙を作成するエディタ、
http://sqs.cmr.sfc.keio.ac.jp/app/SourceEditor.jnlp
その他もろもろ一式を作成して、社会調査実施の支援手法を研究しています。
http://sqs-xml.sourceforge.jp/
ご参考までに。
論文書き、がんばってください!
- 2008-01-14
- by hiroya
- id:-
-
SQS!
先日、SQQと神奈川県立総合教育センターが作っているMarkscanでどちらを使うか最後まで迷って、アンケート用紙作成エディタが付いているMarkscanを採用した者なので、SQSにエディタが付くと素晴らしいですね。- 2008-01-14
- by LiosK
- id:-
-
あら、Markscanユーザでしたか…
ちなみに、SQS SourceEditorは、汎用XMLエディタを狙いつつ、まだイマイチ汎用性を持ち得ていなかったりしているのですが、位置づけとしては、すでに「アンケート用紙作成エディタ」ですよ。
ただし、WYSIWYGな編集をするものではなく、LaTeXやDocBook的に、文書内容の論理的な構造を編集する方式で、アンケートを作成するものになっています(DocBookな人には、ぜひ一度使ってみてもらいたいと思っています…)。
なお、SVG Printを出力可能なWYSIWYGでオープンソースなドローツールがあれば、その出力結果に少し手を加えるしくみを作り足すことで、SQS用のWYSIWYGなアンケートエディタとして使えるようにできると思います。SQSでは、FOPを用いてアンケートの印刷原稿として出力されるPDFに、SVG Print+XFormsでレイアウトのメタデータを作ったものを、iTextで埋め込んでいます。要は、このSVG Print+XFormsがあればよいのです。- 2008-01-14
- by hiroya
- id:-

