Xubuntu 12.04 で DocBook V5.0 から日本語 PDF を作成する。

Xubuntu 12.04 で DocBook V5.0 から日本語 PDF を作成してみました。

環境作成

1. Ubuntu ソフトウェアセンターから Eclipse をインストールします。

$ sudo apt-get install eclipse

主な理由は apache ant をインストールすることですが、統合環境としても利用できます。

2. DocBook-XSL を取得します。

http://docbook.sourceforge.net/ より docbook-xsl-ns-1.77.0.zip をダウンロードします。

ダウンロードした docbook-xsl-ns-1.77.0.zip を /opt/docbook-xsl-ns-1.77.0 へ展開します。

3. Apache FOP を取得します。

http://xmlgraphics.apache.org/fop/ より fop-1.0-bin.zip をダウンロードします。

ダウンロードした fop-1.0-bin.zip を /opt/fop-1.0-bin.zip へ展開します。

環境作成に関して

Ubuntu では Ubuntu ソフトウェアセンターからパッケージをダウンロードするのが通常はおすすめなんですが、今回は eclipse 以外はマニュアルでインストールしています。

理由1: jar ファイルが /usr/share/java にまとめてインストールされてしまうため、かえってクラスパスの指定が面倒になるから。

fop を build.xml 経由で実行すると

[fop] SLF4J: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError.
[fop] SLF4J: See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details

とエラーが出ます。

理由2: インストールするモジュールがわかりずらい。
理由3: チームで同じ環境を作りにくい。

Windows でも Eclipse 以外のインストールは同じ手順でできるのでマニュアルの方がわかりやすいです。

サンプルファイル

build.xml

apache ant 用のビルドファイルです。このファイルは src にある *.dbk ファイルから build/*.fo ファイルを作成し、さらに *.pdf まで作成してしまうものです。

<?xml version="1.0" encoding="utf-8"?>
<project name="docbook-ja" default="pdf" basedir=".">
 <property file="build.properties" />
 <property name="build.dir" value="build" />
 <property name="src.dir" value="src" />
 <property name="xsl" value="${src.dir}/docbook-fo.xsl" />
 <path id="xslt.path">
  <fileset dir="${xalan.dir}">
   <include name="*.jar" />
  </fileset>
  <pathelement path="${docbook-xsl-xalan.path}" />
 </path>
 <taskdef name="fop" classname="org.apache.fop.tools.anttasks.Fop">
  <classpath>
   <fileset dir="${fop.dir}/lib">
    <include name="*.jar" />
   </fileset>
   <fileset dir="${fop.dir}/build">
    <include name="*.jar" />
   </fileset>
   <pathelement path="${docbook-xsl-xalan.path}" />
  </classpath>
 </taskdef>
 <target name="pdf" depends="fo" description="create *.pdf from *.fo files">
  <fop format="application/pdf" userconfig="fop.xconf">
   <fileset dir="${build.dir}">
    <include name="*.fo"/>
   </fileset>
  </fop>
 </target>
 <target name="fo" description="create *.fo from *.dbk files">
  <xslt style="${xsl}" classpathref="xslt.path"
   basedir="${src.dir}" destdir="${build.dir}" includes="*.dbk"
   extension=".fo">
   <sysproperty
    key="org.apache.xerces.xni.parser.XMLParserConfiguration"
    value="org.apache.xerces.parsers.XIncludeParserConfiguration" />
  </xslt>
 </target>
 <target name="clean" description="Remove intermeddiate files">
  <delete>
   <fileset dir="${build.dir}" includes="*.fo" />
   <fileset dir="${build.dir}" includes="*.pdf" />
  </delete>
 </target>
</project>

build.properties

build.xml の環境依存しそうな部分を別ファイルにしました。

fop.dir = /opt/fop-1.0
xalan.dir = ${fop.dir}/lib
docbook-xsl.dir = /opt/docbook-xsl-ns-1.77.0
docbook-xsl-xalan.path = ${docbook-xsl.dir}/extensions/xalan27.jar

docbook-fo.xsl

dbk から fo へ変換するためのスタイルシートです。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:import href="file:///opt/docbook-xsl-ns-1.77.0/fo/docbook.xsl"/>
 <xsl:param name="paper.type">A4</xsl:param>
 <xsl:param name="title.font.family">MS PGothic, TakaoExGothic, TakaoPGothic</xsl:param>
 <xsl:param name="body.font.family">MS PMincho, TakaoExMincho, TakaoPMincho</xsl:param>
 <xsl:param name="monospace.font.family">MS UI Gothic, TakaoGothic</xsl:param>
 <xsl:param name="hyphenate">false</xsl:param>
 <xsl:param name="fop1.extensions" select="1" />
 <xsl:param name="use.extensions" select="1" />
</xsl:stylesheet>

src/sample.dbk

最低限必要なことを記述した(と思っている) xml ファイルです。src というフォルダに入れます。

<?xml version="1.0" encoding="utf-8"?>
<book xmlns="http://docbook.org/ns/docbook"
 version="5.0" xml:lang="ja">
 <info>
  <title>
   タイトル
  </title>
  <author>
   <personname>
    名前
   </personname>
  </author>
 </info>
 <chapter>
  <info>
   <title>
    章見出し
   </title>
  </info>
  <para>
   本文
  </para>
 </chapter>
</book>

サンプルのビルド

サンプルを保存したディレクトリで

$ ant

で sample.pdf が出来上がります。

以上です。お疲れ様でした。

続きます。 参考サイト

以下のサイトを参考にしました。

http://www.docbook.org
http://docbook.sourceforge.net/
http://docbook.org/tdg5/
http://sagehill.net/book-description.html
http://xmlgraphics.apache.org/fop/
http://cx5software.com/article_docbook/
http://www.kobu.com/index.htm
http://d.hatena.ne.jp/suttanipaata/20110504/1304527992

コメント

このブログの人気の投稿

バイナリーファイルを C 言語の配列で出力

Python を使って文字コード変換