Asciidoctor による PDF 生成

Python asciidoc と Apache FOP を使って PDF を生成する手順はここで説明しました。今回は asciidoctor と asciidoctor-fopub を使って PDF を生成してみます。動作確認は Fedora 21 でおこないました。

asciidoctor は AsciiDoc から DocBook を生成するツールです。Ruby で開発されており、RubyGem として提供されています。Python の asciidoc の代わりとなるツールです。

asciidoctor-fopub は DocBook から PDF を生成するツールです。Java で開発されており、Apache FOP の代わりとなるツールです。

(参考)
https://github.com/asciidoctor/asciidoctor
https://github.com/asciidoctor/asciidoctor-fopub

これらを、AsciiDoc > DocBook > PDF の順に処理することで AsciiDoc から PDF ドキュメントを生成することができます。

それでは、asciidoctor と asciidoctor-fopub のインストールをおこなってみましょう。

VLGothic フォント、IPA フォントのインストール

日本語フォントをインストールします。root ユーザーにて作業します。

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

Asciidoctor のインストール

rubygem-asciidoctor という名前の RPM パッケージをインストールします。

# yum -y install rubygem-asciidoctor

これにより、以下がインストールされます。Ruby 本体もインストールされます。

1) ruby-irb-2.1.6-27.fc21.noarch.rpm
2) ruby-2.1.6-27.fc21.x86_64.rpm
3) rubygem-bigdecimal-1.2.4-27.fc21.x86_64.rpm
4) rubygem-json-1.8.1-27.fc21.x86_64.rpm
5) rubygem-io-console-0.4.3-27.fc21.x86_64.rpm
6) rubygem-asciidoctor-1.5.2-1.fc21.noarch.rpm
7) rubygem-psych-2.0.5-27.fc21.x86_64.rpm
8) rubypick-1.1.1-2.fc21.noarch.rpm
9) rubygems-2.2.2-101.fc21.noarch.rpm
10) rubygem-rdoc-4.1.1-2.fc21.noarch.rpm
11) ruby-libs-2.1.6-27.fc21.x86_64.rpm

OpenJDK 8 のインストール

asciidoctor-fopub のインストールには OpenJDK が必要になるので、これをインストールします。まずは、利用可能な OpenJDK を確認します。

# yum search all openjdk
...
java-1.8.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.8.0-openjdk-devel.x86_64 : OpenJDK Development Environment
...

OpenJDK 8 をインストールします。

# yum -y install java-1.8.0-openjdk-devel

asciidoctor-fopub のインストール

asciidoctor-fopub はまだ RPM として提供されていません。GitHub から asciidoctor-fopub をクローンしてインストールします。root 以外の一般ユーザーで作業します。

$ cd $HOME
$ git clone https://github.com/asciidoctor/asciidoctor-fopub

日本語の AsciiDoc ファイルを作成して動作確認

asciidoctor-fopub のディレクトリ下に移動して、最初の動作確認をおこないます。

$ cd asciidoctor-fopub

確認用の簡単な日本語の AsciiDoc ファイルを作成します。ファイル名は「samplej.adoc」としました。

$ cat << "EOF" > samplej.adoc
= 今日のご飯
犬猫 太郎 <doc@example.com>

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

== はじめに

今日のご飯のメニュー

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

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

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

EOF

asciidoctor コマンドを使って「samplej.adoc」ファイルから DocBook を作成します。DocBook は「samplej.xml」というファイル名で作成されます。

$ asciidoctor -b docbook -d article -a data-uri! samplej.adoc

つぎに fopub コマンドを使って DocBook ファイルから PDF ファイルを生成しますが、これは以下の手順でおこないます。

まずは、プロキシ配下の環境で作業している場合には、fopub コマンドを最初に実行する前に、「asciidoctor-fopub」ディレクトリの下に「gradle.properties」ファイルを作成して、プロキシの指定をおこいます。

(例)
$ cat << "EOF" > gradle.properties
systemProp.http.proxyHost=proxy.example.com
systemProp.http.proxyPort=8080
systemProp.https.proxyHost=proxy.example.com
systemProp.https.proxyPort=8080
EOF

(参考)
http://gradle.org/docs/current/userguide/userguide_single.html
19.3. Accessing the web via a proxy

つぎに fopub コマンドを使って DocBook ファイルから PDF ファイルを生成します。このとき、日本語フォントを明示的に指定する必要があります。これを忘れると PDF 上で漢字が # に置き換えらて表示されます。

$ ./fopub samplej.xml \
  -param title.font.family VL-PGothic-Regular \
  -param body.font.family VL-PGothic-Regular \
  -param sans.font.family VL-PGothic-Regular \
  -param monospace.font.family VL-PGothic-Regular \
  -param symbol.font.family VL-PGothic-Regular

fopub コマンドが最初に実行されたときに、Gradle によって fopub に必要なライブラリが自動的にインターネットから取得され、これが終了すると PDF 生成が開始されます。fopub コマンドが完了したら、PDF ファイル「samplej.pdf」が生成されるので、日本語が正しく表示されていることを確認します。

fopub コマンドをシステムワイドに利用できるようにする

上記で作成した「asciidoctor-fopub」ディレクトリを「/usr/share/」以下にコピーします。

$ cd $HOME
$ sudo cp -ir ./asciidoctor-fopub /usr/share

fopub コマンドの wrapper シェル「/usr/local/bin/fopub」を作成し、実行権限を付加します。root ユーザーにて作業します。

# cat << "EOF" > /usr/local/bin/fopub
#!/bin/sh
DIRNAME=`dirname $0`
FOPUB_PATH=/usr/share/asciidoctor-fopub
PATH="${FOPUB_PATH}:${PATH}"
exec $FOPUB_PATH/fopub $@
EOF

# chmod +x /usr/local/bin/fopub

「JavaScript Promiseの本」の PDF 生成

動作確認として、fopub コマンドを使って、azu 氏が公開されている 「JavaScript Promiseの本」の PDF を生成してみます。

$ git clone https://github.com/azu/promises-book.git
$ cd promises-book/
$ asciidoctor -b docbook -d book -a data-uri! index.adoc
$ fopub index.xml \
  -param title.font.family VL-PGothic-Regular \
  -param body.font.family VL-PGothic-Regular \
  -param sans.font.family VL-PGothic-Regular \
  -param monospace.font.family VL-PGothic-Regular \
  -param symbol.font.family VL-PGothic-Regular

生成された PDF ファイル「index.pdf」 の内容を確認します。オリジナルサイトで配布されている PDF に近い内容になっており、とても綺麗な仕上がりの PDF ができました。

IPAPMincho フォントを指定して PDF を生成したい場合は、以下のように指定します。

$ fopub index.xml \
  -param title.font.family IPAPMincho \
  -param body.font.family IPAPMincho \
  -param sans.font.family IPAPMincho \
  -param monospace.font.family IPAPMincho \
  -param symbol.font.family IPAPMincho