製作著作 © 2006-2007 Exacteye.com
| 改訂履歴 | |
|---|---|
| 改訂 1.06 | 2007-03-05 |
| 章の附番方法の指定について 説明を補足しました。久しぶりに作成していたら、忘れていました。 | |
| 改訂 1.05 | 2007-03-04 |
| デザインを変えてみました。 | |
| 改訂 1.04 | 2007-02-12 |
| オンラインショップ『匠の店』をオープンしました。 こちらは、鹿児島の特産品を主に販売しているサイトです。 | |
| 改訂 1.03 | 2006-08-07 |
| DocBook V4.5CR3リファレンスを追加しました。 こちらはぼちぼちやっていきます。 1つのbookを複数のファイルに分割するには を追加しました。 | |
| 改訂 1.02 | 2006-07-30 |
| DocBook文書からPDFを出力するを追加しました。 | |
| 改訂 1.01 | 2006-07-27 |
| DocBook XSL のHTML,FOのパラメータリファレンスを掲載しました。 | |
| 改訂 1.00 | 2006-07-23 |
| 初版 | |
概要
Exacteye とは「正確な目」を意味します。自分の目標とするところです。
自宅に設置しているパソコンで公開Webサイトを作成する過程のドキュメントを公開している ところは結構あります。(実際参考にさせて貰っていますし。。。)今回、公開することに したのは「自分なりに纏めたメモを体系的に、かついろいろな形式で出力したい」という 目標があって、なんとか実現できそうですので、その過程やTipsも含めて紹介していきたいと 思います。
このサイトはDocBook V4.5CR3 で記述されています。出力はHTML形式で行っています。 サイトの管理自体はSubversionでバージョン管理を行っています。
目次
概要
DocBook を使ってWebサイトを構築する。とういのは大げさですが、How To 文書を 定型書式にまとめる方法を提示できたらと思います。この文書も How To文書になります。
この章ではWindowsでDocBook文書を作成するための準備やHTMLやPDFなどのフォーマット へ出力するための方法などを紹介します。
目次
図目次
表目次
例目次
DocBook文書を作成し、HTML文書に出力する為に必要なものを列記します。
Java が動く環境であれば、WindowsでもLinuxでも問題なく動作します。 Windowsでの例が少ないので、WindowsXpで説明していきます。
このチュートリアルでは Java の実行環境を必要とします。 JDK1.5.0 のダウンロードページ から最新の Java の実行環境を入手してください。
DocBook文書はXML/SGML形式です。ここで説明するのはXML形式のみになります。 テキストエディタがあれば記述は可能ですが、 記述した文書の妥当性を検証する必要があります。XMLエディタだと入力時にコード補完 も行ってくれるので入力が結構楽です。
ここでは自分が慣れているので Eclipse で説明します。 Eclipse 自体は Eclipse.org から入手できます。 自分はWeb開発のツールが一揃いある All-In-One Eclipse をインストールしました。
DocBookの文書構造を定義しています。最新は
5.0
ですが、 ここでは
4.5CR3
を使用します。 DocBookは始めたばかりなので、日本語文献の多い
4.x
としました。仕様凍結されたバージョンが使いやすそうでしたので。
DocBook XML 4.5
にReadmeなどがあり、DTD自体は
docbook-xml-4.5CR3.zip
をダウンロードします。
XSLT はXML形式からHTML等の形式に変換する際に使用します。DocBook XMLからの変換に 使用するXSLTはNorman Walsh氏の作成した DocBook XSLT が有名ですので、それを使用します。使い方はBob Stayton氏の DocBook XSL: The Complete Guide に詳しく掲載されています。
DocBook文書からHTMLなどの形式に出力する際のビルドツールとして Ant を使用します。 Apache Ant のサイトからダウンロードできますが、 Eclipseには標準で Ant のライブラリが付属していますのでそれを使用することにします。
Apache のXMLプロジェクトの中にあるJava のXpath/XSLT プロセッサです。 Xalan-Java Version 2.7.0 から入手できます。
こうやってリストアップすると結構ありますね。
ここでは入手したツールのインストールなどの説明を行いますが、Java,Eclipseのインストールは EclipseWiki 等が詳しいので参照してください。 文字コードはUTF-8で記述することにします。
JavaとEclipseのインストールが終わったら、Eclipseでプロジェクトを作成します。 メニューから
++ (Alt-Shift-N-R)
を作成します。 名前はdocbook-sample とし、
D:/project/docbook-sample
に作成します。
ダウンロードした、DocBook DTD
docbook-xml-4.5CR3.zip
を解凍し、作成したプロジェクトにコピーします。
DocBook XSL
docbook-xsl-1.70.1.zip
も解凍し、プロジェクトに 追加します。
Xalan
は入手したファイル
xalan-j_2_7_0-bin.zip
を適当な場所に解凍します。その中に
xalan.jar
と
serializer.jar
があるので、 プロジェクトの
/lib
ディレクトリにコピーします。
目次
Hello World のDocBook文書を作成します。 作成するのはDocBook文書の
helloworld.xml
,XSLTファイルの
hello-html.xml
,HTMLのスタイルシートの
hello-html.css
,Antのビルドファイル
build.xml
です。
まず、プロジェクトに
/helloworld
というフォルダを 作成し、その下に
/helloworld/contents
フォルダを 作成します。DocBook文書はここに置くようにします。
Eclipseを使ってDocBook文書を作成します。
Eclipseで + (Ctrl-N) を選択し、XMLを選択します。
プロジェクトにDocBook DTDをコピーしているのでそれを参照できるように Create XML file from a DTD file を選択します。
作成するXMLのファイル名を指定します。
/helloworld/contents
フォルダを選択し、ファイル名を
helloworld.xml
と入力します。
DTDを選択します。プロジェクト内のDocBook DTD を選択します。
ルート要素の指定を行います。今回はbookをルートとします。 Public IDには
-//OASIS//DTD DocBook XML V4.5//EN
を指定します。
以下のようなXMLファイルが作成されます。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"../../docbook-xml-4.5CR3/docbookx.dtd" >
<book>
</book>
以下のようなDocBook文書を作成します。内容については後述します。
helloworld.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "../../docbook-xml-4.5CR3/docbookx.dtd" > <book lang="ja"> <title>Hello World</title> <chapter> <title>最初のDocBook文書の作成</title> <para>ハローワールドのサンプル</para> </chapter> </book>
DocBook文書から単一のHTMLファイルへ変換するスタイルシートの作成を行います。
hello-html.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.70.1/html/docbook.xsl"/> <xsl:output method="html" encoding="UTF-8" indent="yes" /> <xsl:param name="admon.graphics" select="1"/> <xsl:param name="section.autolabel" select="1"/> <xsl:param name="html.stylesheet">css/hello-html.css</xsl:param> </xsl:stylesheet>
XSLタグの説明を以下に記述します。
表 III.1. docbook-xslタグの説明
| タグ | 説明 | |||
|---|---|---|---|---|
xsl:import
|
単一のHTML変換用のスタイルシート
|
|||
xsl:output
|
|
画像ファイルをどこに?とか、画像の種類の指定方法は
/docbook-xsl-1.70.1/html/param.xsl
を見るとデフォルト値の記述があります。いくつかピックアップして説明していきます。
表 III.2. DocBook-XSLで使用しているパラメータの設定
| パラメータ名 | 説明 |
|---|---|
admon.graphics
|
注釈や、警告などの表示にアイコン画像を使用するか否かを指定します。 デフォルトはアイコン画像を指定しないようになっています。 |
admon.graphics.path
|
画像の参照先のフォルダを指定します。デフォルトは
|
admon.graphics
|
アイコン画像を使用するか/使用しないかを設定します。
アイコン画像を指定する際は上図のように
|
callout.graphics.extension
|
画像ファイルの拡張子を指定します。デフォルトは
|
section.autolabel
|
章に番号を付けるかどうかを指定します。
|
html.stylesheet
|
出力ファイルが参照するCSSのファイルを指定します。 |
生成されるHTMLが参照するスタイルシートです。
/helloworld/contents/css
に保存します。
hello-html.css h1.title { padding: 5px 5px 5px 10px; border-left: 10px solid blue; border-bottom: 2px solid blue; } h2.title { padding: 3px 3px 3px 5px; border-left: 5px solid blue; border-bottom: 2px solid blue; } h3.title { padding: 3px 3px 3px 5px; border-left: 5px solid blue; border-bottom: 1px solid blue; } h4.title { padding: 3px 3px 3px 5px; border-left: 5px solid blue; border-bottom: 1px solid blue; } div.book { margin: 30px 30px 30px 30px; } div.caution { background: #FFCCCC; } div.important { background: #FFCCCC; } div.note { background: #CCCCFF; } div.tip { background: #CCCCFF; } div.warning { background: #FFCCCC; } pre.programlisting { border-width: 1ex; border-color: blue; border-style: solid; color: white; background-color: blue; } pre.screen { border-width: 1ex; border-color: black; border-style: solid; color: white; background-color: black; } body { font-family: gill, helvetica, sans-serif; font-size: 12pt; }
Antで実行する際の設定ファイルを作成します。 最初にプロパティの設定ファイル
build.properties
を作成します。
build.properties docbook.home=../docbook-xml-4.5CR3 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 html.dest.dir=${basedir}/html source=helloworld.xml html.stylesheet=${basedir}/hello-html.xsl
次にビルドファイル
build.xml
を作成します。 ファイルの内容については
Apache Ant 1.6.5 Manual
等を参考にしてください。
build.xml <project name="helloworld.docbook" basedir="." default="all"> <property file="build.properties" /> <target name="clean"> <delete dir="${html.dest.dir}"/> <mkdir dir="${html.dest.dir}"/> </target> <target name="all"> <antcall target="clean"/> <antcall target="html"/> </target> <target name="html"> <copydir dest="${html.dest.dir}/images" src="${xsl.dir}/images"/> <copydir dest="${html.dest.dir}/css" src="${src.dir}/css"/> <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}" destdir="${html.dest.dir}" style="${html.stylesheet}" extension=".html" includes="${source}"> <classpath> <pathelement location="${lib.dir}/xalan.jar" /> </classpath> <xmlcatalog> <dtd publicId="${docbook.public.id}" location="${docbook.dtd}" /> </xmlcatalog> </xslt> </target> </project>
Ant でビルドを実行すると、単一のHTMLファイルが
/html
以下に作成されているはずです。
こちら
で確認できます。
DocBook XSLの中にあるdocbook-xsl-1.70.1/html/chunk.xsl
というファイルをインポートして使用します。
項II.1. 「
Eclipse
でプロジェクトの作成
」で作成したプロジェクトに
/helloworld-chunkという名前で
フォルダを作成し、
章 III. DocBook文書から単一のHTMLを作成するで作成したファイルをコピーします。
以下のような構成になっていると思います。
例 IV.1. 分割HTML出力用のXSLファイル
hello-html.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.70.1/html/chunk.xsl"/>
<xsl:output method="html" encoding="UTF-8" indent="yes"
doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
doctype-system="http://www.w3.org/TR/html4/loose.dtd"
/>
<xsl:param name="chapter.autolabel" select="1"/>
<xsl:param name="section.autolabel" select="1"/>
<xsl:param name="admon.graphics" select="1"/>
<xsl:param name="html.stylesheet">
css/hello-html.css
</xsl:param>
</xsl:stylesheet>
![]() |
インポートするXSLファイルを変更します。
|
![]() |
HTML文書のDOCTYPE宣言を入れるにはここに 記述するといいはずだが、chunk.xslで定義すると 二重に出力されてしまう。 |
章 III. DocBook文書から単一のHTMLを作成するで作成したDocBook文書は章が一つの構成 だったので、もう一つ増やしてみます。
例 IV.2. 分割HTML出力用のDocBook文書
helloworld.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "../../docbook-xml-4.5CR3/docbookx.dtd" > <book lang="ja"> <title>Hello World</title> <chapter> <title>最初のDocBook文書の作成</title> <para>ハローワールドのサンプル</para> </chapter> <chapter><title>次の章</title> <para>ハローワールドのサンプル2</para> </chapter> </book>
![]() |
ここから下が追加した部分です。 |
目次
このサイトで作成しているDocBook文書はXML形式ですので、一旦 XSL-FO 形式に変換し、XSL FO形式からPDFを出力するといった手順で出力します。
Apache FOPはまだ導入していないので、インストールと設定をここで行います。
FOPは Apache.org が作成した XSL-FO によって駆動する世界最初のプリントフォーマッターです。 フォーマッティングオブジェクトツリーを読み込みそれをPDF文書に変換するJavaのクラスライブラリです。
FOPはApache XMLプロジェクトの一部で,FOPのホームページは http://xml.apache.org/fop にあります。
Apache FOPのダウンロードページ
からFOPのアーカイブを入手します。ファイル名は
fop-0.20.5-bin.zip
になります。
入手したファイルをプロジェクトに解凍します。解凍したフォルダをこれからは
FOP_HOME
と呼びます。
インストール自体はこれで完了です。
インストール後のFOPの動作確認を行います。
コマンドプロンプトを開いて、
FOP_HOME
に移動します。
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
> cd /D D:\project\docbook\fop-0.20.5
D:\project\docbook\fop-0.20.5>
FOP_HOME/examples/fo
にサンプルがあります。 その中の/basic/readme.foファイルをPDFに変換してみます。
D:\project\docbook\fop-0.20.5>fop examples\fo\basic\readme.fo readme.pdf
[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] [2]
[INFO] [3]
[INFO] [4]
[INFO] [5]
[INFO] [6]
[INFO] [7]
[INFO] [8]
[INFO] [9]
[INFO] [10]
[INFO] Parsing of document complete, stopping renderer
FOP_HOME
直下にreadme.pdfが出来ているはずです。
こちら
で確認できます。
Apache FOPはデフォルトの状態では日本語フォントが含まれていないため、日本語を含む XSL-FO からPDF文書を作成した場合に、文字化けが発生します。 ここでは、日本語フォントを使えるようにするための設定を行います。
Apache FOPでデフォルトで用意してあるフォントは14種類です。 Helvetica (normal, bold, italic, bold italic), Times (normal, bold, italic, bold italic), Courier (normal, bold, italic, bold italic), Symbol and ZapfDingbats.
設定は以下の手順で行います。
フォント・メトリクス・ファイルの作成
日本語TrueTypeフォントからフォント情報を取り出して、XMLフォーマットの フォント・メトリクス・ファイルを作成します。
userconfig.xml
の修正
XSL-FO
で使用するフォント名とフォント・メトリクス・ファイル との関連付けを
userconfig.xml
に記述します。
詳細は FOP:Fonts を参照してください。
Apache FOPで使用できるフォントは Type1フォント と TrueTypeフォント の2種類です。最初にWindowsXpで標準で用意されている「MSゴシック」と「MS明朝体」 のフォント・メトリックス・ファイルを作成します。
WindowsXpのインストール済みのフォントは
C:/Windows/Fonts
フォルダに 格納されています。「MSゴシック体」フォントは
msgothic.ttc
という名前で保管されていて、フォント名は「MSゴシック &MSPゴシック&MS UIGothic」、 「MS
Gothic &MS PGothic & MS
UIGothic」の2つのフォント名が表示されています。 「MS明朝体」も同様で、フォントのファイル名は
msmincho.ttc
でフォント名は「MS明朝 &MSP明朝」、「MS Mincho &MS
PMincho」の2つのフォント名が あります。
1つのフォントファイルに対して2つのフォント名が定義されているようですが、いったいどちらの 名前でフォント・メトリックス・ファイルを作成すればいいのでしょう?
調査するにはApache FOPに含まれる
org.apache.fop.fonts.apps.TTFReader
クラスを実行して調べます。Antで実行して調査しますので、 プロジェクト直下にビルド設定ファイルとして
build-fop.xml
ファイルを作成します。
例 V.1. TTFReaderを使ってフォント名を調査する
build-fop.xml <project name="fop.docbook" basedir="." default="all"> <!-- ===================================================================== == == Apache FOP フォント定義 ビルドファイル == == 目的:日本語フォントはデフォルトで登録されていないので、 == フォント定義ファイルの作成などの処理を行う。 == == copyright (c) exacteye.com allright reserved. == ===================================================================== --> <property environment="env"/><property name="font.path" value="${env.SystemRoot}/fonts"/>
<property name="lib.dir" value="${basedir}/lib"/> <property name="fop.home" value="${basedir}/fop-0.20.5"/>
<property name="fop.conf.dir" value="${fop.home}/conf"/> <path id="fop.class.path"> <pathelement location="${fop.home}/build/fop.jar"/> <pathelement location="${fop.home}/lib/xercesImpl-2.2.1.jar"/> <pathelement location="${lib.dir}/xalan.jar"/>
<!-- このjar ファイルのバージョンが古かったのでFileNotExceptionが 発生していた。 <pathelement location="${fop.home}/lib/xalan-2.4.1.jar"/> --> </path> <target name="all"> <antcall target="getMinchoFontName"/> <antcall target="getGothicFontName"/> </target> <!-- ===================================================================== == == わざとエラーを出しTTCファイルに含まれるフォント名を判別する == 調査用 == ===================================================================== --> <!-- MS明朝体 -->
<target name="getMinchoFontName"> <echo message="-------------------------------------------------"/> <echo message="msmicho.ttcに含まれるフォント名の確認"/> <echo message="-------------------------------------------------"/> <java classname="org.apache.fop.fonts.apps.TTFReader" args="${font.path}/msmincho.ttc test.xml" > <classpath refid="fop.class.path"/> </java> </target> <!-- MSゴシック体 --> <target name="getGothicFontName"> <echo message="-------------------------------------------------"/> <echo message="msgothic.ttcに含まれるフォント名の確認"/> <echo message="-------------------------------------------------"/> <java classname="org.apache.fop.fonts.apps.TTFReader" args="${font.path}/msgothic.ttc test.xml" > <classpath refid="fop.class.path"/> </java> </target> </project>
![]() |
システムの環境変数を
|
![]() |
フォントのインストールフォルダを定義します。 |
![]() |
Apache FOPのインストールフォルダを定義します。 |
![]() |
クラスパスの定義ですが、FOPの
|
![]() |
このターゲットを実行すると
|
getGothicFontNameターゲットを実行すると、
msgothic.ttc
に含まれているフォント名が分かります。 MS Gothic,MS PGothic,MS UI
Gothicがこの場合含まれているようです。
Buildfile: D:\project\docbook\build-fop.xml
getGothicFontName:
[echo] -------------------------------------------------
[echo] msgothic.ttcに含まれるフォント名の確認
[echo] -------------------------------------------------
[java] The args attribute is deprecated. Please use nested arg elements.
[java] TTF Reader v1.1.1
[java] Reading C:\WINDOWS/fonts/msgothic.ttc...
[java] This is a TrueType collection file with 3 fonts
[java] Containing the following fonts:
[java] MS Gothic
[java] MS PGothic
[java] MS UI Gothic
[java] java.lang.IllegalArgumentException: For TrueType collection you must
specify which font to select (-ttcname)
[java] at org.apache.fop.fonts.TTFFile.readFont(TTFFile.java:416)
[java] at org.apache.fop.fonts.apps.TTFReader.loadTTF(TTFReader.java:222)
[java] at org.apache.fop.fonts.apps.TTFReader.main(TTFReader.java:184)
....
BUILD SUCCESSFUL
Total time: 2 seconds
同様に
getMinchoFontName
ターゲットも実行してMS明朝体のフォント名 を確認します。MS Mincho, MS PMincho
が含まれていました。
フォント名が分かったので先ほど作成した
build-fop.xml
ファイルを修正してフォント・メトリックス・ファイルを作成できるように修正します。
例 V.2. フォント・メトリックス・ファイルの作成
build-fop2.xml <!-- MS ゴシック体 --> <target name="confMSGothic"> <java classname="org.apache.fop.fonts.apps.TTFReader"> <arg line="-ttcname "MS Gothic"${font.path}/msgothic.ttc ${fop.conf.dir}/msgothic.xml"/> <classpath refid="fop.class.path"/> </java> </target>
![]() |
-ttcname [フォント名] [フォントファイル名] [フォント・メトリックス・ファイルの保存先] で指定してください。 |
![]() | 注意 |
|---|---|
|
フォント名に半角空白文字が含まれている場合は前後に" を入れてください。 |
Antビルドを実行すると、以下のような出力が得られるはずです。 以下は
confMSGothic
ターゲットを実行した結果です。
FOP_HOME/conf/
フォルダに
mspgothic.xml
というファイルが出来ていると思います。
こちら
で確認できます。
Buildfile: D:\project\docbook\build-fop.xml
confMSGothic:
[java] TTF Reader v1.1.1
[java] Reading C:\WINDOWS/fonts/msgothic.ttc...
[java] This is a TrueType collection file with 3 fonts
[java] Containing the following fonts:
[java] * MS Gothic
[java] MS PGothic
[java] MS UI Gothic
[java] Number of glyphs in font: 20458
[java] Postscript format 3
[java] Creating xml font file...
[java] Creating CID encoded metrics
[java] Writing xml font file D:\project\docbook/fop-0.20.5/conf/msgothic.xml...
[java] This font contains no embedding license restrictions
BUILD SUCCESSFUL
Total time: 3 seconds
実行して出来たフォント・メトリックス・ファイルの一覧です。
MS Gothic
MS PGothic
MS UI Gothic
MS Mincho
MS PMincho
フォント・メトリックス・ファイルは作成できたので、今度は
XSL-FO
に記述するフォント名と 実際のフォント・メトリックス・ファイルの関係を定義する必要があります。 Apache
FOPでは
FOP_HOME/conf/userconfig.xml
に記述します。
![]() | 注意 |
|---|---|
|
記述する際の注意
|
以下のように記述します。
userconfig.xml <!-- =========================================================================== == == 日本語フォントの定義の追加 == =========================================================================== --> <!-- MS明朝体 --> <font metrics-file="D:\project\docbook\fop-0.20.5\conf\msmincho.xml" kerning="yes" embed-file="C:\WINDOWS\Fonts\msmincho.ttc"> <font-triplet name="Mincho" style="normal" weight="normal" /> <font-triplet name="Mincho" style="normal" weight="bold" /> <font-triplet name="Mincho" style="italic" weight="normal" /> <font-triplet name="Mincho" style="italic" weight="bold" /> <font-triplet name="MS-Mincho" style="normal" weight="normal" /> <font-triplet name="MS-Mincho" style="normal" weight="bold" /> <font-triplet name="MS-Mincho" style="italic" weight="normal" /> <font-triplet name="MS-Mincho" style="italic" weight="bold" /> <font-triplet name="MSMincho" style="normal" weight="normal" /> <font-triplet name="MSMincho" style="normal" weight="bold" /> <font-triplet name="MSMincho" style="italic" weight="normal" /> <font-triplet name="MSMincho" style="italic" weight="bold" /> <font-triplet name="MS明朝" style="normal" weight="normal" /> <font-triplet name="MS明朝" style="normal" weight="bold" /> <font-triplet name="MS明朝" style="italic" weight="normal" /> <font-triplet name="MS明朝" style="italic" weight="bold" /> </font> <!-- MSP明朝体 --> <font metrics-file="D:\project\docbook\fop-0.20.5\conf\mspmincho.xml" kerning="yes" embed-file="C:\WINDOWS\Fonts\msmincho.ttc"> <font-triplet name="PMincho" style="normal" weight="normal" /> <font-triplet name="PMincho" style="normal" weight="bold" /> <font-triplet name="PMincho" style="italic" weight="normal" /> <font-triplet name="PMincho" style="italic" weight="bold" /> <font-triplet name="MS-PMincho" style="normal" weight="normal" /> <font-triplet name="MS-PMincho" style="normal" weight="bold" /> <font-triplet name="MS-PMincho" style="italic" weight="normal" /> <font-triplet name="MS-PMincho" style="italic" weight="bold" /> <font-triplet name="MSPMincho" style="normal" weight="normal" /> <font-triplet name="MSPMincho" style="normal" weight="bold" /> <font-triplet name="MSPMincho" style="italic" weight="normal" /> <font-triplet name="MSPMincho" style="italic" weight="bold" /> <font-triplet name="MSP明朝" style="normal" weight="normal" /> <font-triplet name="MSP明朝" style="normal" weight="bold" /> <font-triplet name="MSP明朝" style="italic" weight="normal" /> <font-triplet name="MSP明朝" style="italic" weight="bold" /> </font> <!-- MSゴシック体 --> <font metrics-file="D:\project\docbook\fop-0.20.5\conf\msgothic.xml" kerning="yes" embed-file="C:\WINDOWS\Fonts\msgothic.ttc"> <font-triplet name="Gothic" style="normal" weight="normal" /> <font-triplet name="Gothic" style="normal" weight="bold" /> <font-triplet name="Gothic" style="italic" weight="normal" /> <font-triplet name="Gothic" style="italic" weight="bold" /> <font-triplet name="MS-Gothic" style="normal" weight="normal" /> <font-triplet name="MS-Gothic" style="normal" weight="bold" /> <font-triplet name="MS-Gothic" style="italic" weight="normal" /> <font-triplet name="MS-Gothic" style="italic" weight="bold" /> <font-triplet name="MSGothic" style="normal" weight="normal" /> <font-triplet name="MSGothic" style="normal" weight="bold" /> <font-triplet name="MSGothic" style="italic" weight="normal" /> <font-triplet name="MSGothic" style="italic" weight="bold" /> <font-triplet name="MSゴシック" style="normal" weight="normal" /> <font-triplet name="MSゴシック" style="normal" weight="bold" /> <font-triplet name="MSゴシック" style="italic" weight="normal" /> <font-triplet name="MSゴシック" style="italic" weight="bold" /> </font> <!-- MSPゴシック体 --> <font metrics-file="D:\project\docbook\fop-0.20.5\conf\mspgothic.xml" kerning="yes" embed-file="C:\WINDOWS\Fonts\msgothic.ttc"> <font-triplet name="PGothic" style="normal" weight="normal" /> <font-triplet name="PGothic" style="normal" weight="bold" /> <font-triplet name="PGothic" style="italic" weight="normal" /> <font-triplet name="PGothic" style="italic" weight="bold" /> <font-triplet name="MS-PGothic" style="normal" weight="normal" /> <font-triplet name="MS-PGothic" style="normal" weight="bold" /> <font-triplet name="MS-PGothic" style="italic" weight="normal" /> <font-triplet name="MS-PGothic" style="italic" weight="bold" /> <font-triplet name="MSPGothic" style="normal" weight="normal" /> <font-triplet name="MSPGothic" style="normal" weight="bold" /> <font-triplet name="MSPGothic" style="italic" weight="normal" /> <font-triplet name="MSPGothic" style="italic" weight="bold" /> <font-triplet name="MSPゴシック" style="normal" weight="normal" /> <font-triplet name="MSPゴシック" style="normal" weight="bold" /> <font-triplet name="MSPゴシック" style="italic" weight="normal" /> <font-triplet name="MSPゴシック" style="italic" weight="bold" /> </font> <!-- MSUIゴシック体 --> <font metrics-file="D:\project\docbook\fop-0.20.5\conf\msuigothic.xml" kerning="yes" embed-file="C:\WINDOWS\Fonts\msgothic.ttc"> <font-triplet name="UIGothic" style="normal" weight="normal" /> <font-triplet name="UIGothic" style="normal" weight="bold" /> <font-triplet name="UIGothic" style="italic" weight="normal" /> <font-triplet name="UIGothic" style="italic" weight="bold" /> <font-triplet name="UI Gothic" style="normal" weight="normal" /> <font-triplet name="UI Gothic" style="normal" weight="bold" /> <font-triplet name="UI Gothic" style="italic" weight="normal" /> <font-triplet name="UI Gothic" style="italic" weight="bold" /> <font-triplet name="MS-UIGothic" style="normal" weight="normal" /> <font-triplet name="MS-UIGothic" style="normal" weight="bold" /> <font-triplet name="MS-UIGothic" style="italic" weight="normal" /> <font-triplet name="MS-UIGothic" style="italic" weight="bold" /> <font-triplet name="MSUIGothic" style="normal" weight="normal" /> <font-triplet name="MSUIGothic" style="normal" weight="bold" /> <font-triplet name="MSUIGothic" style="italic" weight="normal" /> <font-triplet name="MSUIGothic" style="italic" weight="bold" /> <font-triplet name="MSUIゴシック" style="normal" weight="normal" /> <font-triplet name="MSUIゴシック" style="normal" weight="bold" /> <font-triplet name="MSUIゴシック" style="italic" weight="normal" /> <font-triplet name="MSUIゴシック" style="italic" weight="bold" /> </font>
実際に日本語フォントでPDF文書が作成できるか確認します。
hello.jp.fo
というファイルを作成します。
hello.jp.fo <?xml version="1.0" encoding="utf-8"?> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simple-page-master master-name="simple"> <fo:region-body margin-top="3cm"/> <fo:region-before extent="3cm"/> <fo:region-after extent="1.5cm"/> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="simple"> <fo:flow flow-name="xsl-region-body"> <fo:block font-size="18pt" text-align="center" font-family="Mincho"> ハロー (明朝体) </fo:block> <fo:block font-size="18pt" text-align="center" font-family="PMincho"> ハロー (P明朝体) </fo:block> <fo:block font-size="18pt" text-align="center" font-family="Gothic"> ハロー (MSゴシック) </fo:block> <fo:block font-size="18pt" text-align="center" font-family="PGothic"> ハロー (MSPゴシック) </fo:block> <fo:block font-size="18pt" text-align="center" font-family="UI Gothic"> ハロー (MSUIゴシック) </fo:block> </fo:flow> </fo:page-sequence> </fo:root>
作成したら
FOP_HOME/examples/fo/basic
に保存します。
FOP コマンドで実際に実行してみます。
Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. >cd /D D:\project\docbook\fop-0.20.5 >fop examples\fo\basic\hello.jp.fo hello.pdf -c conf\userconfig.xml [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] Using org.apache.xerces.parsers.SAXParser as SAX2 Parser [INFO] Using org.apache.xerces.parsers.SAXParser as SAX2 Parser [INFO] Using org.apache.xerces.parsers.SAXParser as SAX2 Parser [INFO] Using org.apache.xerces.parsers.SAXParser as SAX2 Parser [INFO] Parsing of document complete, stopping renderer D:\project\docbook\fop-0.20.5>
![]() | 注意 |
|---|---|
|
実行時にオプションで
|
hello.pdf のように日本語がきちんと表示されているのを確認します。
DocBook文書からPDFを実際に出力してみます。 大まかな流れとしては以下のようになると思います。
DocBook文書をDocBook-XSLを使用してFOへ変換します。
必要なもの:FO変換用のDocBook-XSLの定義ファイル
FOをApache FOPを使用してPDFへ変換します。
以下のような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" />
<xsl:param name="chunker.output.encoding" select="'UTF-8'" />
<xsl:param name="fop.extensions" select="1" />
<xsl:param name="paper.type" select="'A4'" />
<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="chapter.autolabel" select="'I'"/>
<xsl:param name="callout.graphics.extension" select="'.gif'"/>
<xsl:param name="title.font.family" select="'MSGothic'" />
<xsl:param name="body.font.family" select="'MSMincho'" />
<xsl:param name="sans.font.family" select="'MSGothic'" />
<xsl:param name="monospace.font.family" select="'MSMincho'" />
</xsl:stylesheet>
![]() |
インポートするxslファイルを指定します。 |
![]() |
FOP を使用する場合(0.20.5またはそれ以前のバージョン)は |
![]() |
出力する用紙サイズの設定をします。 |
![]() |
ドラフトモードで作成するかどうかのパラメータ。 |
![]() |
節の自動附番を行うかどうかのフラグ。デフォルトは |
![]() |
番号のつけ方で
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
|
![]() |
[ERROR] Couldn't find hyphenation pattern ja
[ERROR] Error building hyphenation tree for language ja
|
![]() |
章の番号の付け方の定義
|
![]() |
calloutで使用する画像の形式。デフォルトは png だが,FOPの場合はエラーが発生するので、gifにした。 |
![]() |
このフォント名は FOP のユーザー・コンフィグレーション・ファイルで定義したフォント名を指定します。 フォント名指定を誤ると、FOP がフォントを見つけられず、作成される PDF では、該当箇所が "#" と表示されてしまいます。 |
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"
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}"
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"
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>
![]() |
Apache FOPにはAnt用のタスク定義が行えるクラスが付属しているので 定義します。 |
![]() |
DocBook-XSLスタイルシートを使用してDocBook文書から FOへ変換する処理を記述しています。 |
![]() |
Apache FOPを使用してFOファイルからPDFへ変換する処理を記述しています。 |
変換対象のDocBook文書は項IV.3. 「DocBook文書の修正」で作成した文書を使います。
Ant実行後にhelloworld.pdf が作成されます。
ここでご紹介している文章のように1つのbookにドキュメントを記述していくと、 1,000行を越えたあたりから、自分はだんだん可読性が悪くなります。 なんとか分割出来ないものかと調べていましたら、book自体も複数のファイルに 分割できるんですね。
例としてdocbook.xmlというファイルを章毎に分けてみることにします。
章毎に、docbook-pre.xml,docbook-set.xml...とdocbookを作成します。 ルートは「章」になるので、chapterです。docbook-pre.xmlの中身を見てみましょう。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "../../docbook-xml-4.5CR3/docbookx.dtd"> <chapter id="docbook_pre"> <title>必要なツールとその入手先の紹介</title> ... </chapter>
次にchapterの上の要素であるbookのファイルdocbook.xmlの中を見て見ます。 ごらんのようにENTITYで宣言することで、参照をすることが出来るようになります。
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "../../docbook-xml-4.5CR3/docbookx.dtd"[ <!ENTITY docbook_pre SYSTEM "docbook-pre.xml"> <!ENTITY docbook_set SYSTEM "docbook-set.xml"> <!ENTITY docbook_html SYSTEM "docbook-html.xml"> <!ENTITY docbook_chunk SYSTEM "docbook-chunk.xml"> <!ENTITY docbook_pdf SYSTEM "docbook-pdf.xml"> <!ENTITY docbook_reference SYSTEM "docbook-reference.xml"> <!ENTITY docbook_glossary SYSTEM "docbook-glossary.xml"> ]> <book id="docbook"> &docbook_pre; &docbook_set; &docbook_html; &docbook_chunk; &docbook_pdf; &docbook_reference; &docbook_glossary; </book>
![]() | 注意 |
|---|---|
|
文章を記述する際にはDOCTYPE宣言は記述しておかないと、入力補完等の機能が使えなくなるので 入れておくと便利ですが、AntでHTML等に出力する際はコメントアウトしておいてください。 |
概要
DocBookで使用するタグの詳しい説明は DocBook: The Definitive Guide にあります。
目次
1989年にApple社が開発し、同社のMac OS 7.0(当時はSystem 7.0)から搭載しているフォントシステム。 また、同システムで用いられるフォント形式。 Microsoft社に技術供与され、Windows 95からはシステム標準のフォントシステムとして広く用いられている。 TrueTypeはOSの機能として実装されたアウトラインフォントシステムであるため、 拡大・縮小してもジャギー(ギザギザ)が生じず、解像度によらない精細な出力を画面と印刷の両方で同じように得られる。
Adobe Systems社のページ記述言語「PostScript」で利用するフォント格納形式の一つ。 アルファベットなどの1バイト文字を収録するためのフォント形式で、 事実上の標準形式として多くの欧文フォントに採用されている。
三次ベジェ曲線で表現されたアウトラインフォントとなっており、 低解像度で字形が歪むのを補正するヒンティング機能を備える。
Microsoft社、Inso社、ArborText社の3社を中心に提案された、 XML文書の見栄え(スタイルシート)を記述する言語。 XMLの見栄えを記述する言語としてはXSLのほかに、 HTMLの見栄えを記述するのに使われているCSSも使うことができる。
XSL-FOとは、 W3C で制定された XMLを奇麗にレイアウトして印刷するための仕様として策定した XSL 仕様の略称です。 XSL Version 1.0 仕様は、2001年10月15日にW3C勧告となりました。
参照 W3C(World Wide Web Consortium), XSL(Extensible Stylesheet Language).
この文書を作成するに当たって参考にした文書を列記します。
日本語の文献
目次
図目次
表目次
自宅でサーバ環境を構築する時に考えることがいくつかあります。妻子持ちなので 条件を挙げていくとだんだん億劫になってきました。
24時間稼動させたい。
仕事でもパソコンを使っているので自宅にある文書を閲覧したいので これは実現したいですね。
騒音がしないこと。
お金が掛からないこと。
OS、パソコン、消費電力も含めて考えないといけません。
結果として、パソコンはキューブタイプの静音性の高いものを一台組み上げました。 OSは最初からWindowsは考えていなくて、Linuxにしました。Vine Linuxにしようとも 思いましたが、今回は勉強もしたかったのでDebian GNU/Linuxにしました。
Debian GNU/Linux は Debian Project が作成したLinux のディストリビューションのひとつで、安定版(stable)はよくテスト されていて本当に安定しているので気に入っています。
以前はVine Linuxを使っていましたが、Debianを使い出したら戻れなくなってしまいました。 結構、コマンドを覚えないといけないので面倒なはずなのですが。。。
コンテンツの作成は慣れているWindowsXpが入っているノートパソコンで行っています。 公開用のサーバとして購入したパソコンを充てています。 大変シンプルな構成ですね。
どこまで構築できるかは分かりませんが、WWWサーバ,Mailサーバ, Svnサーバとしての機能は持たせたいと思います。
Debianをインストールする時に、『デスクトップ環境』を選んでいない場合は日本語での 表示は出来ていないと思います。日本語表示をする方法を記述します。
システムとして日本語のロケールが作成されているか確認します。
# dpkg-reconfigure locales
して「ja_JP.EUC-JP」をつくる。 この時どのロケールをシステム標準にするか聞かれますが、
特別な理由がない限り「なし (None)」を選びます。 システム標準のロケールを日本語
(ja_JP.EUC-JP など) にした場合、
デフォルトで日本語を表示できないコンソールでの表示が化ける事になります。 ちなみにここで選んだロケールの設定は
/etc/environment
に書き込まれます。 設定内容を確認します。
$ cat /etc/locale.gen | grep ^ja_JP ja_JP.EUC-JP EUC-JP
ユーザ毎の設定を行います。language-env パッケージに含まれる set-language-env コマンドを使えば日本語に必要な設定をしてくれます。
$ set-language-env
質問に答えていくだけで、設定ファイルを適当に作ってくれます。 この後、 startx で X を走らせると、日本語の表示や入力がほとんど動いています。 ただし man にも書いてあるとおり root での使用は止めましょう。
標準ではターミナルエミュレータが自動起動するように設定されます。 自動起動させたくないなら、
~/.xsession
の先頭に
TERMINAL_EMULATOR=NONE
を追記しましょう。
X Window で日本語を表示するには日本語フォントが必要です。TrueTypeフォントとXビットマップフォント の導入を行います。
debian は TrueType フォントを defoma と x-ttcidfont.conf
で管理しています。 インストールされていなければインストールします。
# apt-get install defoma x-ttcidfont-conf
/etc/X11/XF86Config-4
への設定を行います。以下の記述を追加します。
Section "Files"
FontPath
"/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
EndSection
xtt モジュール読み込むのも忘れずに。
freetype
と記述のある 部分を書き換えます。
Section "Module"
# Load "freetype"
Load "xtt"
EndSection
apt-get
コマンドでパッケージのインストールを行うと、
/usr/local/share/fonts
以下にコピーされ、 ヒントファイルも自動で作成されました。以下は表示上の都合の為改行していますが、
一行で入力しています。
# apt-get install ttf-kochi-gothic ttf-kochi-mincho ttf-kochi-gothic-naga10 ttf-sazanami-gothic ttf-sazanami-mincho
今まで、kinput2 + canna で日本語入力を行っていました。変換効率があまり良くないので 他のかな漢字変換を物色しました。uim+ anthy を使うことにします。 日本語入力環境改善プロジェクト の記事を読んだら良さそうでしたので使ってみます。
UIMはUniversal Imput Method の略称です。 日本語だけでなく、韓国語や中国語、さらにその他の言語にも対応することが可能です。 kinput2への置き換えが可能です。
オフィシャルサイトは http://uim.freedesktop.org/ です。使えるかな漢字変換システムは以下です。
かな漢字変換エンジン Anthy
連文節変換方式の変換エンジン。Microsoft IME(MS-IME)やATOKなどに慣れている方向け。
予測入力システム PRIME
携帯電話のような、予測入力方式の変換エンジン。
SKK
Shift キーを押して明示的に文節を指定することで高精度の変換を行うエンジン。
uim anthy をインストールします。
uim-applet-gnomeもインストールしておくと、 uim-im-switcher(uimで動的に変換エンジンを切り替える機能)が日本語表示になります。
# aptitude install anthy uim uim-anthy uim-applet-gnome
~/.xsession
の設定を行います。
if type uim-xim &> /dev/null ; then uim-xim & fi XMODIFIERS=@im=uim ; export XMODIFIERS GTK_IM_MODULE=uim; export GTK_IM_MODULE UIM_IM_ENGINE=anthy ; export UIM_IM_ENGINE uim-xim & uim-toolbar-gtk & uim-toolbar-gtk-systray &
kterm などで上記の設定で動かない場合には
.Xresources
ファイルを編集します。
#define XIM uim
kinput2 が設定されていたらコメントアウトします。
!#define XIM kinput2 !Kinput2*conversionStartKeys: Shift<Key>space
Windowsパソコンでは日本語入力の切替はAlt+半角/漢字 キーまたは、半角/漢字キーのみで行います。が、Linuxというよりkinput2 + canna の環境ではCtrl + o, Shift + Space等で切り替えるようになっています。 102キーボードを前提にしてそうな感じはしますが、自分が使用しているのは106の日本語キーボード なので、半角/漢字キーで切替ができるとうれしいです。
まず、最初にキーコードの調査を行い、キーの割付を変えることで実現していこうと思います。