wiki Wiki | contuct me Contuct me |

Menu

V.5. PDFを出力する

DocBook文書からPDFを実際に出力してみます。 大まかな流れとしては以下のようになると思います。

  1. DocBook文書をDocBook-XSLを使用してFOへ変換します。

    必要なもの:FO変換用のDocBook-XSLの定義ファイル

  2. FOをApache FOPを使用してPDFへ変換します。

V.5.1. FO出力用のXSLの作成

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

例 V.3. FO出力用のXSLファイルのサンプル

    				
docbook-pdf.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version='1.0'>
  <xsl:import href="../docbook-xsl-1.70.1/fo/docbook.xsl" /> 1
  <xsl:param name="chunker.output.encoding" select="'UTF-8'" />  
  <xsl:param name="fop.extensions" select="1" /> 2
  <xsl:param name="paper.type" select="'A4'" /> 3
  <xsl:param name="draft.mode" select="'no'" /> 4
  <xsl:param name="section.autolabel" select="1" /> 5
  <xsl:param name="section.label.includes.component.label" select="1" /> 6
  <xsl:param name="hyphenate">false</xsl:param> 7
  <xsl:param name="chapter.autolabel" select="'I'"/> 8
  <xsl:param name="callout.graphics.extension" select="'.gif'"/> 9
  <xsl:param name="title.font.family" select="'MSGothic'" /> 10
  <xsl:param name="body.font.family" select="'MSMincho'" /> 11
  <xsl:param name="sans.font.family" select="'MSGothic'" /> 12
  <xsl:param name="monospace.font.family" select="'MSMincho'" /> 13
</xsl:stylesheet>    				
    			
1

インポートするxslファイルを指定します。

2

FOP を使用する場合(0.20.5またはそれ以前のバージョン)は1にする。 デフォルトは0

3

出力する用紙サイズの設定をします。

4

ドラフトモードで作成するかどうかのパラメータ。

5

節の自動附番を行うかどうかのフラグ。デフォルトは0

6

番号のつけ方で1を設定することで、以下のように附番される。 デフォルトは0

    						
Chapter 3. Using a mouse
1.  Basic mouse actions    sect1
1.1  Left button           sect2
1.2  Right button          sect2
1.2.1 Context menus        sect3
2.  Selecting              sect1
2.1  Click and drag
2.2  Double click				
    						
    					
7

trueに設定した場合は言葉がハイフンで結ばれる。 日本語の場合はfalseにしないとエラーが発生する。

    						
[ERROR] Couldn't find hyphenation pattern ja
[ERROR] Error building hyphenation tree for language ja
								
    					
8

章の番号の付け方の定義

  • 1 または arabic

    (Default)数字で附番される。 (1, 2, 3 ...).

  • A または upperalpha

    大文字のアルファベットで附番される。例 (A, B, C ...).

  • a または loweralpha

    小文字のアルファベットで附番される。例 (a, b, c ...).

  • I または upperroman

    大文字のローマ数字で附番される。例(I, II, III ...).

  • i または lowerroman

    小文字のローマ数字で附番される。例 (i, ii, iii ...).

9

calloutで使用する画像の形式。デフォルトは png だが,FOPの場合はエラーが発生するので、gifにした。

10

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


V.5.2. build.xmlファイルの作成

PDF生成用のbuild.xmlファイルと プロパティファイルbuild.propertiesを作成します。

				
build.properties
				
docbook.home=../docbook-xml-4.5CR3
fop.home=../fop-0.20.5
	
docbook.dtd=${docbook.home}/docbookx.dtd
docbook.public.id=-//OASIS//DTD DocBook XML V4.5//EN
	
lib.dir=../lib
xsl.dir=../docbook-xsl-1.70.1
src.dir=${basedir}/contents
	
dest.dir=${basedir}/pdf
source=helloworld.xml
				
			

例 V.4. PDF出力用のbuild.xmlファイルサンプル

    					
build.xml
<project name="helloworld-pdf.sample" basedir="." default="all">
  <property file="build.properties" />
  <taskdef name="fop" 1
           classname="org.apache.fop.tools.anttasks.Fop">
    <classpath>
      <pathelement location="${fop.home}/build/fop.jar"/>
      <pathelement location="${fop.home}/lib/avalon-framework-cvs-20020806.jar"/>
      <pathelement location="${fop.home}/lib/batik.jar"/>
    </classpath>
  </taskdef>
        
  <target name="clean">
    <delete dir="${dest.dir}"/>
    <mkdir dir="${dest.dir}"/>
  </target>  
  
  <target name="all">
    <antcall target="clean"/>
    <antcall target="pdf"/>
  </target>

  <target name="pdf">
    
    <copydir dest="${dest.dir}/images" 
             src="${xsl.dir}/images"/>
        
    <xmlvalidate warn="false">
      <xmlcatalog>
        <dtd publicId="${docbook.public.id}"
             location="${docbook.dtd}" />
      </xmlcatalog>
      <fileset dir="${src.dir}">
        <include name="${source}" />
      </fileset>
    </xmlvalidate>
    <xslt basedir="${src.dir}" 2
          destdir="${dest.dir}" 
          style="${basedir}/docbook-pdf.xsl" 
          extension=".fo" 
          includes="helloworld.xml">
      <classpath>
        <pathelement location="${lib.dir}/xalan.jar" />
      </classpath>
      <xmlcatalog>
        <dtd publicId="${docbook.public.id}" location="${docbook.dtd}" />
      </xmlcatalog>
    </xslt>
    <fop format="application/pdf" 3
         basedir="${dest.dir}"
         outdir="${dest.dir}"
         messagelevel="debug"
         userconfig="${fop.home}/conf/userconfig.xml">
      <fileset dir="${dest.dir}">
        <include name="*.fo"/>
      </fileset>
    </fop>
  </target>
</project>
    				
1

Apache FOPにはAnt用のタスク定義が行えるクラスが付属しているので 定義します。

2

DocBook-XSLスタイルシートを使用してDocBook文書から FOへ変換する処理を記述しています。

3

Apache FOPを使用してFOファイルからPDFへ変換する処理を記述しています。


変換対象のDocBook文書は項IV.3. 「DocBook文書の修正」で作成した文書を使います。

Ant実行後にhelloworld.pdf が作成されます。