DocBookで文系論文を書いてみる 2日目

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

DocBookで文系論文を書いてみる 2日目

前回は、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 Gothicmsgoth04.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に変換してみる。

でも今日は疲れたのでここまでー

「DocBookで文系論文を書いてみる」の目次はこちら

スポンサーサイト

関連記事

トラックバック URL

http://liosk.blog103.fc2.com/tb.php/71-a32860d8

トラックバック

コメント

こんにちは。
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:-

コメントの投稿

お名前
コメント
編集キー
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。