DocBook文件轉換環境設定(下)
白明弘
(文接上期第48頁)
安裝Formatter
使用XSL轉換文件時,如果要轉換成列印文件格式(如PDF、PostScript
等)時,通常必須分成兩個步驟,先用XSLT processor將文件轉換成
formatting objects,再用formatter將formatting objects轉換成
列印文件。FOP是Apache計畫所發展的一個formatter,可以把Formatting
Object格式的文件轉換成可列印文件,如PDF、PostScript等格式。
使用FOP同樣需要有Java執行環境。下面以FOP 0.20.3版為例,示範
FOP的安裝步驟:
1.從http://xml.apache.org 下載FOP 0.20.3版:
$ wget http://xml.apache.org/dist/fop/Fop-0.20.3-bin.tar.gz
2.將FOP套件解壓縮:
$ tar zxvf Fop-0.20.3-bin.tar.gz
3.將所有以jar為附文件名的檔案拷貝到Java的library目錄下:
$ cp Fop-0.20.3/build/*.jar /usr/java/jdk1.3.1/lib
$ cp Fop-0.20.3/lib/*.jar /usr/javaj/jdk1.3.1/lib
4.將conf及hyph目錄拷貝到適當的目錄下(這兩個目錄在中文化時
才用的到):
$ mkdir -p /usr/local/share/fop
$ cp -a Fop-0.20.3/conf /usr/local/share/fop
$ cp -a Fop-0.20.3/hyph /usr/local/share/fop
FOP安裝好之後,就可以將FO格式的文件轉換成PDF了。不過和xalan
一樣,執行FOP需要指定許多個CLASS PATH,所以還是得先寫一個
shell script把程序包裝起來。下面為shell script的範例,讀者
可以依據自己的環境做修改:
#!/bin/sh
# fop.sh -- wrapper of apache fop
# JAVA 解譯器的安裝路徑
JAVA=/usr/java/jdk1.3.1/bin/java
# JAVA library 的安裝路徑
JAVA_LIB=/usr/java/jdk1.3.1/lib
# 所有的類別路徑
JAR=」fop.jar \
logkit-1.0b4.jar\
sax.jar xerces.jar\
avalon-framework-4.0.jar\
batik.jar xalan.jar\
jimi-1.0.jar\
xalanj1compat.jar」
for i in $JAR
do
CLASSPATH=」$CLASSPATH:$JAVA_LIB/$i」
done
export CLASSPATH
echo CLASSPATH=$CLASSPATH
# 執行
$JAVA $FOP_OPTS org.apache.fop.apps.Fop 「$@」
將以上的shell script存成fop.sh,為了執行方便,可以拷貝到
/usr/local/bin。
中文化環境設定
如已完成前述安裝作業,即已經把DocBook的文件轉換環境建立起
來了。而如果要處理中文文件,還有一些設定要修改,此部份包括
DocBook XSL Stylesheet及FOP的中文字形,以下將針對這兩個部份
分別說明。
DocBook XSL Stylesheet的中文化
DocBook XSL Stylesheet在轉換成FO時所指定的字形只有英文字
形,如果不修改就直接套用在中文文件上,則所有的中文字最後都
將被取代成「#」字型大小輸出。修改stylesheet時,為了保持DocBook
的完整起見,必須另外建立一個XSL檔來繼承原來的docbook.xsl,
並且修改部份的定義。假設取名為bg5docbook.xsl,其內容如下:
xmlns:fo=「http://www.w3.org/1999/XSL/Format」
xmlns:doc=「http://nwalsh.com/xsl/documentation/1.0」
exclude-result-prefixes=「doc」
version=『1.0』>
bkai
12
bkai
3.8cm
2.54cm
在bg5docbook.xsl中,使用xsl:import指令以繼承docbook.xsl的
設定,並且修改了三個部份的設定,字形及字體大小、紙張大小、
以及邊框大小。在中文化中,最重要的是設定字形,其餘的可視需
要而設定。在上例中,將文件的body及title字形設定為楷書(bkai),
紙張大小設定為A4,邊框則設定為左邊(內邊)3.8公分,右邊(外
邊)2.54公分。最後一個變數設定,是為了修正頁碼顯示的問題,
當DocBook中的字體大小超過10pt時,頁碼就會消失,原因是頁碼的
顯示區域太小,formatter將頁碼顯示的動作忽略了。該變數的預設
值為12pt,最大隻能放10pt的頁碼。要???????????????????
個問題只需將顯示區域設大一點就可以了,如上例設定為20pt。
DocBook在文件區域化的選項里,繁體中文文件的區域化屬性為zh_tw,
但是FOP所認得的區域化屬性為zh,如果FOP無法正確辨認出區域化
屬性,則輸出的中文文件的斷行會出現問題,這是因為FOP將連續的
中文字當作是不可分割的單位之故。本文的作法是將DocBook XSL
Stylesheet內的common目錄下的zh_tw.xml做修改,直將把第二行
language=「zh_tw」改成language=「zh」即可。
FOP的中文化
在前一節中,DocBook已指定輸出的字形為楷書,但是FOP本身並
沒有附中文字形,使用者必須自己加入中文字形。加入字形要做兩
件事情,第一是產生matrics?n,第二是在userconfig.xml檔案中加
入字形信息。
FOP套件中提供一個TTFReader的程序,TTFReader可以從ttf字形
檔產生matrics?n。為了執行上的便利,首先要將TTFReader包裝在
shell script程序中,下列為包裝範例:
#!/bin/sh
#
# ttfreader.sh
#
JAVALIB=」/usr/java/jdk1.3.1/lib」
CLASSPATH=」$JAVALIB/fop.jar:$JAVALIB/xerces.jar」
export JAVALIB CLASSPATH
java org.apache.fop.fonts.apps.TTFReader 「$@」
將檔案存成ttfreader.sh,並拷貝到/usr/local/bin,就可以用
來建立matrics?n了。假設系統中已經有文鼎楷書字形存放於
/usr/share/fonts/zh_TW/TrueType/bkai00mp.ttf目錄下,下列的
指令可以產生matrics文件:
$ ttfreader.sh -fn arphic_kai /usr/share/fonts/zh_TW/TrueType
/bkai00mp.ttf/usr/local/share/fop/conf/bkai.xml
執行完后,在/usr/local/share/fop/conf/目錄下會多出一個
bkai.xml的檔案,bkai.xml就是文鼎楷書的matrics?n。
接著要編輯/usr/local/share/fop/conf/userconfig.xml檔案,將
下列的設定加入到userconfig.xml檔案中:
embed-file=「/usr/share/fonts/zh_TW/TrueType/bkai00mp.ttf」>
embed-file=「/usr/share/fonts/zh_TW/TrueType/bkai00mp.ttf」>
embed-file=「/usr/share/fonts/zh_TW/TrueType/bkai00mp.ttf」>
編輯好userconfig.xml文件之後,FOP就可以使用文鼎楷書字形了。
試試中文的DocBook文件:
「http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd」>
這是一個中文的DocBook文件,供測試之用,看看中文字有
沒有出現?斷行有沒有斷得很混亂。如果沒有大
問題,那就恭喜你了!
將上列的文字存成test.xml,然後使用下列的指令將文件轉成fo?n:
$ xalan.sh -in test.xml -xsl /usr/share/sgml/docbook/docbook-xsl-1.48
/fo/bg5docbook.xsl-out test.fo
產生fo檔之後,再使用fop轉成pdf?n:
$ fop.sh -c /usr/local/share/fop/conf/userconfig.xml-fo
test.fo -pdf test.pdf
產生test.pdf之後,再以acrobat reader開啟,檢查看看中文字
有沒有出現,再看看斷行有沒有斷得亂七八糟。
結語
本篇文章介紹了如何安裝及設定DocBook 文件轉換環境,並提供
簡單的範例供讀者參考。因為每個人的操作系統環境不盡相同,在
設定時可能有部份必須修改,如JAVA程序安裝的路徑等。
至於如何編輯DocBook文件,讀者必須另外研讀參考資料,例如,
中心呂學祥先生所撰寫之「使用Emacs編輯XML」文章
(http://www.sinica.edu.tw/~lu)以及,O』Reilly出版社出版的
「DocBook:The Definitive Guide」,這本書除了到書店購買以外,
讀者也可以直接從http://docbook.org網站免費下載。(全文完)