日本語の AsciiDoc を PDF 出力する方法

AsciiDoc から PDF を作成する方法を前回説明しましたが、このままでは日本語の文字が PDF 上で「#」で置き換えられて出力されます。ここでは日本語を含む AsciiDoc から PDF を作成する方法を説明します。動作確認は Fedora 21 でおこないました。

Fedora の日本語フォント

Fedora で利用できる日本語フォントには「VL Gothic」、「IPA Gothic」、「IPA 明朝」などがあります。また、それらのプロポーショナルフォントにあたるものとして、「VL PGothic」、「IPA PGothic」、「IPA P明朝」があります。

VLGothic フォント、IPA fonts をインストールする

VLGothic フォント、IPA フォントをインストールします。VLGothic フォントは「vlgothic*-fonts」の名称で、IPA フォントは「ipa-*-fonts」の名称で rpm パッケージに収録されていますので、つぎのコマンドでインストールできます。

# yum -y install vlgothic*-fonts 
# yum -y install ipa-*-fonts

(参考)
http://vlgothic.dicey.org/
https://www.ipa.go.jp/osc/ipafont

True Type Font のパスを確認

インストールされているフォントの情報は fc-list コマンドで確認できます。Fedora 21 では font ファイルは /usr/share/fonts/ 以下のサブディレクトリに配置されています。たとえば、「VL Gothic」系のフォントはつぎのファイル名で配置されています。

# fc-list | grep -i vl
/usr/share/fonts/vlgothic/VL-PGothic-Regular.ttf: VL PGothic,VL Pゴシック:style=regular
/usr/share/fonts/vlgothic/VL-Gothic-Regular.ttf: VL Gothic,VL ゴシック:style=regular

また「IPA Gothic」、「IPA 明朝」などのフォントはつぎのファイル名で配置されています。

# fc-list | grep -i ipa
/usr/share/fonts/ipa-ex-mincho/ipaexm.ttf: IPAexMincho,IPAex明朝:style=Regular
/usr/share/fonts/ipa-ex-gothic/ipaexg.ttf: IPAexGothic,IPAexゴシック:style=Regular,Regulare
/usr/share/fonts/ipa-pgothic/ipagp.ttf: IPAPGothic,IPA Pゴシック:style=Regular
/usr/share/fonts/ipa-pmincho/ipamp.ttf: IPAPMincho,IPA P明朝:style=Regular
/usr/share/fonts/ipa-gothic/ipag.ttf: IPAGothic,IPAゴシック:style=Regular
/usr/share/fonts/ipa-mincho/ipam.ttf: IPAMincho,IPA明朝:style=Regular

fop.xconf を変更

日本語を含む AsciiDoc から PDF を生成するためには、FOP を適切に設定する必要があります。まず最初に fop.xconf を変更します。デフォルトの設定のままでは使い勝手が悪いので、オリジナルは別名で保存しておき、つぎのように変更します。

# cp -np /usr/share/fop/conf/fop.xconf /usr/share/fop/conf/fop.xconf-ORG

# cat << "EOF" > /usr/share/fop/conf/fop.xconf
<?xml version="1.0"?>
<fop version="1.0">
  <base>.</base>
  <source-resolution>72</source-resolution>
  <target-resolution>72</target-resolution>
  <default-page-settings height="240mm" width="120mm"/>
  <renderers>
    <renderer mime="application/pdf">
      <filterList>
        <value>flate</value>
      </filterList>
      <fonts>
        <directory recursive="true">/usr/share/fonts</directory>
        <auto-detect/>
      </fonts>
    </renderer>
  </renderers>
</fop>
EOF

日本語フォントの font metrics ファイルを生成

※ True Type Font については fop.xconf に「<auto-detect/>」を指定することにより、フォントの検出が自動でおこなわれるため、現在ではこのセクションに記載されている font metrics ファイルの作成作業は不要です。参考情報として残してあるだけですので、つぎのセクションに進んでください。

FOP で日本語フォントを出力できるようにするには、font metrics ファイルを新たに生成する必要があります。作成する場所は、/usr/share/fop/conf/ 以下とします。

つぎの例は、「VL Gothic」、「VL PGothic」、「IPAPGothic」、「IPAGothic」、「IPAPMincho」、「IPAMincho」の各フォントの font metrics ファイルを作成しています。font metrics ファイルの生成には FOP に含まれる TTFReader という Java プログラムを使用します。ここでは create_font_metrics.sh というシェルを作成して実行し、font metrics ファイルを作成しています。

# cat << "EOF" > /usr/share/fop/conf/create_font_metrics.sh
#!/bin/bash
export CLASSPATH=/usr/share/java/fop.jar:/usr/share/java/avalon-framework.jar:/usr/share/java/commons-logging.jar:/usr/share/java/commons-io.jar:/usr/share/java/xmlgraphics-commons.jar
cd /usr/share/fop/conf/
#-- Font Family: [VL Gothic, VL ゴシック]
java org.apache.fop.fonts.apps.TTFReader /usr/share/fonts/vlgothic/VL-Gothic-Regular.ttf VL-Gothic-Regular.xml
#-- Font Family: [VL PGothic, VL Pゴシック]
java org.apache.fop.fonts.apps.TTFReader /usr/share/fonts/vlgothic/VL-PGothic-Regular.ttf VL-PGothic-Regular.xml
#-- Font Family: [IPAGothic, IPAゴシック]
java org.apache.fop.fonts.apps.TTFReader /usr/share/fonts/ipa-gothic/ipag.ttf ipag.xml
#-- Font Family: [IPAPGothic, IPA Pゴシック]
java org.apache.fop.fonts.apps.TTFReader /usr/share/fonts/ipa-pgothic/ipagp.ttf ipagp.xml
#-- Font Family: [IPAMincho, IPA明朝]
java org.apache.fop.fonts.apps.TTFReader /usr/share/fonts/ipa-mincho/ipam.ttf ipam.xml
#-- Font Family: [IPAPMincho, IPA P明朝]
java org.apache.fop.fonts.apps.TTFReader /usr/share/fonts/ipa-pmincho/ipamp.ttf ipamp.xml
EOF
 
# cd /usr/share/fop/conf/
# chmod +x create_font_metrics.sh
 
# ./create_font_metrics.sh

fop.xsl スタイルシートの作成

ドキュメントのフォントを指定するために XSL スタイルシートを作成します。ここでは「VL PGothic」、および「IPAPGothic」フォントについての例を示します。

(1) fop-VL-PGothic.xsl スタイルシートの作成

ドキュメントの Font Mamily に「VL PGothic」フォントを指定する XSL スタイルシートの例です。ここでは fop-VL-PGothic.xsl というファイル名で作成します。

# cat << "EOF" > /usr/share/fop/conf/fop-VL-PGothic.xsl
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:fo="http://www.w3.org/1999/XSL/Format" 
    encoding="UTF-8" >
<xsl:import href="/etc/asciidoc/docbook-xsl/fo.xsl"/>
<xsl:param name="paper.type" select="'A4'"/>

<xsl:template>
  <fo:inline font-family="VL PGothic">
    <xsl:apply-templates/>
  </fo:inline>
</xsl:template>

<xsl:param name="title.font.family">VL PGothic</xsl:param>
<xsl:param name="body.font.family">VL PGothic</xsl:param>
<xsl:param name="sans.font.family">VL PGothic</xsl:param>
<xsl:param name="monospace.font.family">VL PGothic</xsl:param>
<xsl:param name="symbol.font.family">VL PGothic</xsl:param>

</xsl:stylesheet>
EOF

(2) fop-IPAPGothic.xsl スタイルシートの作成

ドキュメントの Font Mamily に「IPAPGothic」フォントを指定する XSL スタイルシートの例です。ここでは fop-IPAPGothic.xsl というファイル名で作成します。

# cat << "EOF" > /usr/share/fop/conf/fop-IPAPGothic.xsl
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:fo="http://www.w3.org/1999/XSL/Format" 
    encoding="UTF-8" >
<xsl:import href="/etc/asciidoc/docbook-xsl/fo.xsl"/>
<xsl:param name="paper.type" select="'A4'"/>

<xsl:template>
  <fo:inline font-family="IPAPGothic">
    <xsl:apply-templates/>
  </fo:inline>
</xsl:template>

<xsl:param name="title.font.family">IPAPGothic</xsl:param>
<xsl:param name="body.font.family">IPAPGothic</xsl:param>
<xsl:param name="sans.font.family">IPAPGothic</xsl:param>
<xsl:param name="monospace.font.family">IPAPGothic</xsl:param>
<xsl:param name="symbol.font.family">IPAPGothic</xsl:param>

</xsl:stylesheet>
EOF

(3) fop-IPAPMincho.xsl スタイルシートの作成

ドキュメントの Font Mamily に「IPAPMincho」フォントを指定する XSL スタイルシートの例です。ここでは fop-IPAPMincho.xsl というファイル名で作成します。

# cat << "EOF" > /usr/share/fop/conf/fop-IPAPMincho.xsl
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:fo="http://www.w3.org/1999/XSL/Format" 
    encoding="UTF-8" >
<xsl:import href="/etc/asciidoc/docbook-xsl/fo.xsl"/>
<xsl:param name="paper.type" select="'A4'"/>

<xsl:template>
  <fo:inline font-family="IPAPMincho">
    <xsl:apply-templates/>
  </fo:inline>
</xsl:template>

<xsl:param name="title.font.family">IPAPMincho</xsl:param>
<xsl:param name="body.font.family">IPAPMincho</xsl:param>
<xsl:param name="sans.font.family">IPAPMincho</xsl:param>
<xsl:param name="monospace.font.family">IPAPMincho</xsl:param>
<xsl:param name="symbol.font.family">IPAPMincho</xsl:param>

</xsl:stylesheet>
EOF

以上で設定は終わりです。

asciidoc で日本語ドキュメントを作成

ここでは、日本語を含む AsciiDoc ファイルを作成して、sample-japanese.asciidoc という名前のファイルで保存します。

# cat << "EOF" > sample-japanese.asciidoc
= 今日のご飯
犬猫 太郎 <doc@example.com>

参考サイト http://asciidoctor.org/[Asciidoctor]

== はじめに

今日のご飯のメニュー

* ドリンク: お酒
* メインディッシュ: 「猫まんま」/「犬まんま」からお選びください

Ruby のプログラムのサンプルです。

.A basic Ruby application
[source,ruby]
----
puts "寿司食べたい!"
----
EOF

a2x コマンドを使って asciidoc から日本語 PDF を作成

さきほどの保存した AsciiDoc から PDF を作成します。

(1)「VL PGothic」フォントを使って PDF 出力してみます。

$ a2x --format=pdf --doctype=article \
  --icons --icons-dir=/usr/share/asciidoc/images/icons \
  --fop --fop-opts='-c /usr/share/fop/conf/fop.xconf' \
  --xsl-file=/usr/share/fop/conf/fop-VL-PGothic.xsl \
  sample-japanese.asciidoc

PDF ファイル「sample-japanese.pdf」が出力されるので、これを開いて日本語フォントが表示されることを確認してください。また、PDF に「VL PGothic」フォントが埋め込まれているこを確認します。

$ pdffonts sample-japanese.pdf

(2)「IPAPGothic」フォントを使って PDF 出力してみます。

$ a2x --format=pdf --doctype=article \
  --icons --icons-dir=/usr/share/asciidoc/images/icons \
  --fop --fop-opts='-c /usr/share/fop/conf/fop.xconf' \
  --xsl-file=/usr/share/fop/conf/fop-IPAPGothic.xsl \
  sample-japanese.asciidoc

(3)「IPAPMincho」フォントを使って PDF 出力してみます。

$ a2x --format=pdf --doctype=article \
  --icons --icons-dir=/usr/share/asciidoc/images/icons \
  --fop --fop-opts='-c /usr/share/fop/conf/fop.xconf' \
  --xsl-file=/usr/share/fop/conf/fop-IPAPMincho.xsl \
  sample-japanese.asciidoc

PDF ファイル「sample-japanese.pdf」が出力されるので、これを開いて日本語フォントが表示されることを確認してください。また、同様に PDF に「IPAPMincho」フォントが埋め込まれていることを確認してください。

これで、日本語の AsciiDoc から PDF を簡単に生成できるようになりました。