D-3. DocBook 形式から PDF を作成する

手順としては、以下のようになります。

  • DocBook (.xml) + XSL (.xsl) → [xsltproc] → FO (.fo) → [FOP] → PDF (.pdf)

以下のような XSL (.xsl) ファイルを作成します。

docbook-pdf.xsl:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0">
  <xsl:import href="c:/cygwin/usr/share/docbook-xsl/fo/docbook.xsl"/>
  <xsl:param name="chunker.output.encoding" select="'Shift_JIS'"/>
  <xsl:param name="fop.extensions" select="1"/>
  <xsl:param name="paper.type" select="'A4'"/>
  <xsl:param name="ulink.show" select="0"/>
  <xsl:param name="draft.mode" select="'no'"/>
  <xsl:param name="section.autolabel" select="1"/>
  <xsl:param name="section.label.includes.component.label" select="1"/>
  <xsl:param name="hyphenate">false</xsl:param>
  <xsl:param name="title.font.family" select="'MS-Gothic'"/>
  <xsl:param name="body.font.family" select="'MS-Mincho'"/>
  <xsl:param name="sans.font.family" select="'MS-Gothic'"/>
  <xsl:param name="monospace.font.family" select="'MS-Mincho'"/>
</xsl:stylesheet>

フォントを xsl:param name="要素.font.family" select="'フォント名'"/ として指定しています。このフォント名は FOP のユーザー・コンフィグレーション・ファイルで定義したフォント名を指定します。フォント名指定を誤ると、FOP がフォントを見つけられず、作成される PDF では、該当箇所が "#" と表示されてしまいます。

DocBook 形式ファイルから FO ファイルを作成します。

$ xsltproc -o helloworld.fo ./docbook-pdf.xsl helloworld.xml
Making portrait pages on A4 paper (210mmx297mm)

または…

$ xsltproc  ./docbook-pdf.xsl helloworld.xml  helloworld.fo
Making portrait pages on A4 paper (210mmx297mm)

以下のように実行します。

$ fop helloworld.fo helloworld.pdf
[INFO] Using org.apache.xerces.parsers.SAXParser as SAX2 Parser
[INFO] Using org.apache.xerces.parsers.SAXParser as SAX2 Parser
[INFO] FOP 0.20.5
[INFO] Using org.apache.xerces.parsers.SAXParser as SAX2 Parser
[INFO] building formatting object tree
[INFO] setting up fonts
[INFO] [1]
[INFO] Using org.apache.xerces.parsers.SAXParser as SAX2 Parser
[INFO] [2]
[INFO] [3]
[INFO] [4]
[INFO] Using org.apache.xerces.parsers.SAXParser as SAX2 Parser
[INFO] [1]
[INFO] Parsing of document complete, stopping renderer

helloworld.pdf

1 ページ目: 表紙が作成されている。左側のしおりも DocBook の階層に沿って作成されている。

2 ページ目: 目次が作成されている。

3 ページ目: 実際の文章部分。

新着記事