DITA-OT是DITA Open Toolkit的縮寫,它是一個(gè)開(kāi)源發(fā)布引擎,用于將DITA格式的內(nèi)容發(fā)布成不同格式的輸出,比如:HTML、PDF等。
有些結(jié)構(gòu)化編輯系統(tǒng)(如:Oxygen XML Editor)已經(jīng)集成了DITA-OT。如果選擇DITA來(lái)編寫結(jié)構(gòu)化內(nèi)容,那么你很有可能已經(jīng)通過(guò)DITA-OT進(jìn)行內(nèi)容發(fā)布了。
下邊我們一起來(lái)看看DITA-OT是怎樣工作的。
- 1 -
DITA-OT發(fā)布PDF的過(guò)程
以下是使用DITA-OT發(fā)布PDF的命令:
dita -i cloudphoto.ditamap -f pdf -o pdfout
它的意思是:
運(yùn)行這個(gè)命令,后臺(tái)發(fā)生什么事情呢?下邊我們一起來(lái)看一下。
DITA-OT支持發(fā)布多種格式的輸出,主要分為PDF和基于HTML的輸出兩類。下圖中,藍(lán)色路徑是運(yùn)行發(fā)布PDF命令后走過(guò)的步驟。
1. 通用預(yù)處理
不論發(fā)布的類型是什么,DITA-OT發(fā)布首先運(yùn)行的是預(yù)處理程序。它主要是為后續(xù)的步驟做準(zhǔn)備工作。根據(jù)DITA-OT的文檔,預(yù)處理包括:生成列表、處理引用、內(nèi)容過(guò)濾、移動(dòng)元數(shù)據(jù)等17個(gè)模塊,詳情請(qǐng)見(jiàn)DITA-OT文檔:
https://www./dev/reference/preprocessing.html
2. 合并Topic
DITA數(shù)據(jù)包通常由一個(gè)ditamap和多個(gè)topic文件組成。為了方便處理,DITA-OT將這些內(nèi)容合并到一個(gè)XML文件中。
3. 將XML轉(zhuǎn)換成XSL-FO
XSLT是一個(gè)數(shù)據(jù)轉(zhuǎn)換的語(yǔ)言,由XSLT引擎執(zhí)行。它通過(guò)讀取XML文件,應(yīng)用數(shù)據(jù)處理邏輯,然后生成XSL-FO文件。
4. 將XSL-FO轉(zhuǎn)換成PDF
XSL-FO是W3C的標(biāo)準(zhǔn)之一,用于XML文檔的布局和打印。要將XSL-FO生成PDF,需要用到FO引擎。
DITA-OT目前支持三個(gè)引擎,他們分別是:
-
FOP - 開(kāi)源的FO引擎,已經(jīng)包含在DITA-OT中; -
Antenna House - 商業(yè)FO引擎,DITA-OT可以使用它發(fā)布PDF,但需要單獨(dú)購(gòu)買和安裝; -
RenderX - 商業(yè)FO引擎,DITA-OT使用它發(fā)布PDF,也需要單獨(dú)購(gòu)買和安裝。
- 2 -
中文支持
DITA-OT的實(shí)現(xiàn)了支持多語(yǔ)言處理,但默認(rèn)只對(duì)西方文字有較好的處理。下邊我們來(lái)看一看DITA-OT支持中文的細(xì)節(jié)。
1. 將內(nèi)容標(biāo)識(shí)成中文
在“將XML轉(zhuǎn)換成XSL-FO”這個(gè)步驟中,樣式會(huì)自動(dòng)生成一些文字,比如:目錄最上邊的“目錄”二字。 我們把這種樣式表生成的文字叫做“生成文字” (Gentext)。
Gentext沒(méi)有放在DITA文件中,而是放在樣式文件中,內(nèi)容編輯人員無(wú)法直接控制或者更改它。
DITA中,默認(rèn)的語(yǔ)言是英語(yǔ),如果不做設(shè)置,Gentext默認(rèn)是英文的。所以目錄這個(gè)地方,默認(rèn)是看到'Contents',如下圖紅色方框所示。
如果要讓它顯示中文,我們需要在ditamap文件中標(biāo)識(shí)DITA內(nèi)容的語(yǔ)言為中文。如下圖:
xml:lang屬性表示內(nèi)容的語(yǔ)言,zh-CN代表中文。
這樣,發(fā)布的時(shí)候Gentext就會(huì)顯示中文了。
2. 為FOP安裝中文字體
DITA-OT默認(rèn)帶的FO引擎是FOP,F(xiàn)OP能夠使用操作系統(tǒng)帶的字體。對(duì)于中文,它默認(rèn)使用宋體。但是這個(gè)字體沒(méi)有粗體,所以會(huì)出現(xiàn)粗體不顯示的現(xiàn)象。
如果對(duì)默認(rèn)的字體不滿意,一種解決方案就是安裝其他的字體,比如:阿里巴巴普惠體。
首先,可以從這里免費(fèi)下載阿里巴巴普惠體:
https://alibabafont.taobao.com/
然后,將字體文件解壓并放到以下目錄中:
{DITA-OT_HOME}\plugins\org.dita.pdf2.fop\cfg\fonts\
這樣就為FOP安裝好阿里巴巴普惠體了。
3. 設(shè)置DITA-OT中的字體映射
除了為FOP安裝中文字體,還需要在DITA-OT中設(shè)置字體映射才能在PDF輸出中正確使用字體顯示中文。
DITA-OT的樣式表中,沒(méi)有直接使用最終物理字體的名字,而是使用一個(gè)邏輯字體。根據(jù)映射的配置,邏輯字體最終被翻譯成最終的物理字體。 這種設(shè)計(jì)的好處是可以根據(jù)需要來(lái)配置最終的字體,但又不用修改樣式表的代碼。
DITA-OT的字體映射文件放在了這里:
{DITA-OT_HOME}\dita-ot-3.7\plugins\org.dita.pdf2\cfg\fo\font-mappings.xml
內(nèi)容如下:
<alias name='serif'>Serif</alias> <alias name='sans-serif'>Sans</alias> <alias name='monospace'>Monospaced</alias> <alias name='Helvetica'>Normal</alias> <alias name='Courier'>Monospaced</alias> <logical-font name='Sans'> <physical-font char-set='default'> <font-face>Helvetica, Arial Unicode MS, Tahoma, Batang, SimSun</font-face> <physical-font char-set='Simplified Chinese'> <font-face>AdobeSongStd-Light, Arial Unicode MS, Batang, SimSun</font-face> <physical-font char-set='Japanese'> <font-face>MS-Gothic, Hiragino Kaku Gothic Pro, HiraKakuProN-W3, YuGothic, Arial Unicode MS</font-face> <physical-font char-set='Korean'> <font-face>AdobeMyungjoStd-Medium, Arial Unicode MS, Batang</font-face> <physical-font char-set='Symbols'> <font-face>ZapfDingbats</font-face> <physical-font char-set='SubmenuSymbol'> <font-face>ZapfDingbats</font-face> <physical-font char-set='SymbolsSuperscript'> <font-face>Helvetica, Arial Unicode MS</font-face> <baseline-shift>20%</baseline-shift> <override-size>smaller</override-size> <logical-font name='Serif'> <physical-font char-set='default'> <font-face>Times New Roman, Times, Arial Unicode MS, Tahoma, Batang, SimSun</font-face> <physical-font char-set='Simplified Chinese'> <font-face>AdobeSongStd-Light, Arial Unicode MS, Batang, SimSun</font-face> <physical-font char-set='Japanese'> <font-face>MS-Mincho, Hiragino Mincho Pro, HiraMinProN-W3, YuMincho, Arial Unicode MS</font-face> <physical-font char-set='Korean'> <font-face>AdobeMyungjoStd-Medium, Arial Unicode MS, Batang</font-face> <physical-font char-set='Symbols'> <font-face>ZapfDingbats</font-face> <physical-font char-set='SubmenuSymbol'> <font-face>ZapfDingbats</font-face> <physical-font char-set='SymbolsSuperscript'> <font-face>Times New Roman, Times, Arial Unicode MS, Tahoma, Batang</font-face> <baseline-shift>20%</baseline-shift> <override-size>smaller</override-size> <logical-font name='Monospaced'> <physical-font char-set='default'> <font-face>Courier New, Courier, Arial Unicode MS, Tahoma, Batang, SimSun</font-face> <physical-font char-set='Simplified Chinese'> <font-face>AdobeSongStd-Light, Arial Unicode MS, Batang, SimSun</font-face> <physical-font char-set='Japanese'> <font-face>MS-Gothic, Hiragino Kaku Gothic Pro, HiraKakuProN-W3, YuGothic, Arial Unicode MS</font-face> <physical-font char-set='Korean'> <font-face>AdobeMyungjoStd-Medium, Arial Unicode MS, Batang</font-face> <physical-font char-set='Symbols'> <font-face>ZapfDingbats</font-face> <physical-font char-set='SymbolsSuperscript'> <font-face>Courier New, Courier, Arial Unicode MS, Tahoma, Batang</font-face> <baseline-shift>20%</baseline-shift> <override-size>smaller</override-size>
對(duì)于邏輯字體Serif(看46行),如果是中文,映射的物理字體是:AdobeSongStd-Light, Arial Unicode MS, Batang, SimSun。(看50行)
下邊,將阿里巴巴普惠體配置到文件中:
<logical-font name='Serif'> <physical-font char-set='Simplified Chinese'> Alibaba PuHuiTi, AdobeSongStd-Light, Arial Unicode MS, Batang, SimSun <logical-font name='Monospaced'> <physical-font char-set='Simplified Chinese'> Alibaba PuHuiTi, AdobeSongStd-Light, Arial Unicode MS, Batang, SimSun <logical-font name='Serif'> <physical-font char-set='Simplified Chinese'> Alibaba PuHuiTi, AdobeSongStd-Light, Arial Unicode MS, Batang, SimSun
(分別在3個(gè)邏輯字體的中文情況下,加入Alibaba PuHuiTi)
通過(guò)以上配置,DITA-OT就能使用阿里巴巴普惠體來(lái)顯示中文了。
- 3 -
小結(jié)
在DITA-OT中支持中文字體,包括以下3個(gè)步驟:
-
將內(nèi)容標(biāo)識(shí)成中文; -
安裝中文字體; -
配置字體映射。
- 4 -
術(shù)語(yǔ)
XSLT
XSLT 是一種用于將 XML 文檔轉(zhuǎn)換為 XHTML 文檔或其他 XML 文檔的語(yǔ)言。
參考:
https://www.w3school.com.cn/xsl/index.asp
XSL-FO
XSL-FO 指可擴(kuò)展樣式表語(yǔ)言格式化對(duì)象(Extensible Stylesheet Language Formatting Objects),是用于格式化 XML 數(shù)據(jù)的語(yǔ)言。
參考:
https://www.runoob.com/xslfo/xslfo-tutorial.html
|