2013年5月19日日曜日

[FOP]DocBook から PDF を生成する

DocBook から PDF に出力するには以下の手順を踏む
  1. DocBook の XML から fo ファイルを生成する
  2. Apache FOP を使って fo から PDF を生成する


DocBook → fo
Example: 原稿 (sample.xml)
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" >

<article>
  <title>DocBook sample</title>
  <articleinfo>
    <author>
      <firstname>Hoge</firstname>
      <surname>Fuga</surname>
    </author>

    <copyright>
      <year>2009</year>
    </copyright>
  </articleinfo>

  <sect1><title>Hello World</title><para>Hello World</para></sect1>
  <sect1>
    <title>日本語テスト</title>
    <para>日本語が正しく表示されますか?</para>
  </sect1>
  <sect1>
    <title>hoge</title>
    <para>hello</para>
    <sect2>
      <title>hoge2</title>
      <para>hogehoge</para>
    </sect2>
  </sect1>
</article>
Example: fo を生成するための xsl ファイル (sample_fo.xsl)
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version='1.0'>
  <xsl:import href="../docbook-xsl-1.75.0/fo/docbook.xsl"/>
  <xsl:output method="fo" encoding="UTF-8" indent="yes"/>

  <xsl:param name="section.autolabel" select="1"/>
  <xsl:param name="default.encoding" select="'UTF-8'"/>
  <xsl:param name="paper.type" select="'A4'"/>
  <xsl:param name="draft.mode" select="'no'"/>
  <xsl:param name="hyphenate">false</xsl:param>
  <xsl:param name="callout.graphics.extension" select="'.gif'"/>
  <xsl:param name="title.font.family" select="'Meiryo'"/>
  <xsl:param name="body.font.family" select="'Meiryo'"/>
  <xsl:param name="sans.font.family" select="'Meiryo'"/>
  <xsl:param name="monospace.font.family" select="'Meiryo'"/>
</xsl:stylesheet>
fo を生成するためのルールを build.xml に記述
Example: build.xml
<project name="docbooktest" basedir="." default="xslt">
  <property name="DOCBOOK_DTD" value="../docbook-xml-4.5/docbookx.dtd"/>
  <property name="DOCBOOK_PUBLIC_ID" value="-//OASIS//DTD DocBook XML V4.5//EN"/>
  <property name="LIBDIR" value="../xalan-j_2_7_1/build"/>

  <target name="fo">
    <xslt basedir="${basedir}"
          destdir="${basedir}"
          style="sample_fo.xsl"
          extension=".fo"
          includes="sample.xml">
      <classpath>
        <pathelement location="${LIBDIR}/xalan.jar"/>
      </classpath>
      <xmlcatalog>
        <dtd publicId="${DOCBOOK_PUBLIC_ID}"
             location="${DOCBOOK_DTD}"/>
      </xmlcatalog>
    </xslt>
  </target>
</project>
Ant を実行して fo ファイルを生成する
> ant fo

0 件のコメント:

コメントを投稿