DITA-OT发布过程和中文支持

DITA-OT是DITA Open Toolkit的缩写,它是一个开源发布引擎,用于将DITA格式的内容发布成不同格式的输出,比如:HTML、PDF等。

有些结构化编辑系统(如:Oxygen XML  Editor)已经集成了DITA-OT。如果选择DITA来编写结构化内容,那么你很有可能已经通过DITA-OT进行内容发布了。 

下边我们一起来看看DITA-OT是怎样工作的。

- 1 -

DITA-OT发布PDF的过程

以下是使用DITA-OT发布PDF的命令:

dita -i cloudphoto.ditamap -f pdf -o pdfout

它的意思是

  • 输入文件为cloudphoto.ditamap文件;

  • 输出格式是pdf;

  • 输出结果放到pdfout目录中。 

运行这个命令,后台发生什么事情呢?下边我们一起来看一下。

DITA-OT支持发布多种格式的输出,主要分为PDF和基于HTML的输出两类。下图中,蓝色路径是运行发布PDF命令后走过的步骤。

1. 通用预处理

不论发布的类型是什么,DITA-OT发布首先运行的是预处理程序。它主要是为后续的步骤做准备工作。根据DITA-OT的文档,预处理包括:生成列表、处理引用、内容过滤、移动元数据等17个模块,详情请见DITA-OT文档:

https://www.dita-ot.org/dev/reference/preprocessing.html

2. 合并Topic

DITA数据包通常由一个ditamap和多个topic文件组成。为了方便处理,DITA-OT将这些内容合并到一个XML文件中。

3. 将XML转换成XSL-FO

XSLT是一个数据转换的语言,由XSLT引擎执行。它通过读取XML文件,应用数据处理逻辑,然后生成XSL-FO文件。 

4. 将XSL-FO转换成PDF

 XSL-FO是W3C的标准之一,用于XML文档的布局和打印。要将XSL-FO生成PDF,需要用到FO引擎。

DITA-OT目前支持三个引擎,他们分别是:

  • FOP - 开源的FO引擎,已经包含在DITA-OT中;

  • Antenna House - 商业FO引擎,DITA-OT可以使用它发布PDF,但需要单独购买和安装;

  • RenderX - 商业FO引擎,DITA-OT使用它发布PDF,也需要单独购买和安装。

- 2 -

中文支持

DITA-OT的实现了支持多语言处理,但默认只对西方文字有较好的处理。下边我们来看一看DITA-OT支持中文的细节。

1. 将内容标识成中文

在“将XML转换成XSL-FO”这个步骤中,样式会自动生成一些文字,比如:目录最上边的“目录”二字。 我们把这种样式表生成的文字叫做“生成文字” (Gentext)。

Gentext没有放在DITA文件中,而是放在样式文件中,内容编辑人员无法直接控制或者更改它。

DITA中,默认的语言是英语,如果不做设置,Gentext默认是英文的。所以目录这个地方,默认是看到"Contents",如下图红色方框所示。

 如果要让它显示中文,我们需要在ditamap文件中标识DITA内容的语言为中文。如下图:

 xml:lang属性表示内容的语言,zh-CN代表中文。

这样,发布的时候Gentext就会显示中文了。

 2. 为FOP安装中文字体

DITA-OT默认带的FO引擎是FOP,FOP能够使用操作系统带的字体。对于中文,它默认使用宋体。但是这个字体没有粗体,所以会出现粗体不显示的现象。

如果对默认的字体不满意,一种解决方案就是安装其他的字体,比如:阿里巴巴普惠体。

首先,可以从这里免费下载阿里巴巴普惠体:

https://alibabafont.taobao.com/

 然后,将字体文件解压并放到以下目录中:

{DITA-OT_HOME}\plugins\org.dita.pdf2.fop\cfg\fonts\

 这样就为FOP安装好阿里巴巴普惠体了。

3. 设置DITA-OT中的字体映射

除了为FOP安装中文字体,还需要在DITA-OT中设置字体映射才能在PDF输出中正确使用字体显示中文。 

DITA-OT的样式表中,没有直接使用最终物理字体的名字,而是使用一个逻辑字体。根据映射的配置,逻辑字体最终被翻译成最终的物理字体。 这种设计的好处是可以根据需要来配置最终的字体,但又不用修改样式表的代码。 

DITA-OT的字体映射文件放在了这里:

{DITA-OT_HOME}\dita-ot-3.7\plugins\org.dita.pdf2\cfg\fo\font-mappings.xml

内容如下:

<?xml version="1.0"?>
<font-mappings>
  <font-table>
    <aliases>
      <alias name="serif">Serif</alias>
    </aliases>
    <aliases>
      <alias name="sans-serif">Sans</alias>
    </aliases>
    <aliases>
      <alias name="monospace">Monospaced</alias>
    </aliases>
    <aliases>
      <alias name="Helvetica">Normal</alias>
    </aliases>
    <aliases>
      <alias name="Courier">Monospaced</alias>
    </aliases>
    
    <logical-font name="Sans">
      <physical-font char-set="default">
        <font-face>Helvetica, Arial Unicode MS, Tahoma, Batang, SimSun</font-face>
      </physical-font>
      <physical-font char-set="Simplified Chinese">
        <font-face>AdobeSongStd-Light, Arial Unicode MS, Batang, SimSun</font-face>
      </physical-font>
      <physical-font char-set="Japanese">
        <font-face>MS-Gothic, Hiragino Kaku Gothic Pro, HiraKakuProN-W3, YuGothic, Arial Unicode MS</font-face>
      </physical-font>
      <physical-font char-set="Korean">
        <font-face>AdobeMyungjoStd-Medium, Arial Unicode MS, Batang</font-face>
      </physical-font>      
      <physical-font char-set="Symbols">
        <font-face>ZapfDingbats</font-face>
      </physical-font>
      <physical-font char-set="SubmenuSymbol">
        <font-face>ZapfDingbats</font-face>
      </physical-font>
      <physical-font char-set="SymbolsSuperscript">
        <font-face>Helvetica, Arial Unicode MS</font-face>
        <baseline-shift>20%</baseline-shift>
        <override-size>smaller</override-size>
      </physical-font>
    </logical-font>

    <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>
      <physical-font char-set="Simplified Chinese">
        <font-face>AdobeSongStd-Light, Arial Unicode MS, Batang, SimSun</font-face>
      </physical-font>
      <physical-font char-set="Japanese">
        <font-face>MS-Mincho, Hiragino Mincho Pro, HiraMinProN-W3, YuMincho, Arial Unicode MS</font-face>
      </physical-font>
      <physical-font char-set="Korean">
        <font-face>AdobeMyungjoStd-Medium, Arial Unicode MS, Batang</font-face>
      </physical-font>
      <physical-font char-set="Symbols">
        <font-face>ZapfDingbats</font-face>
      </physical-font>
      <physical-font char-set="SubmenuSymbol">
        <font-face>ZapfDingbats</font-face>
      </physical-font>
      <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>
      </physical-font>
    </logical-font>

    <logical-font name="Monospaced">
      <physical-font char-set="default">
        <font-face>Courier New, Courier, Arial Unicode MS, Tahoma, Batang, SimSun</font-face>
      </physical-font>
      <physical-font char-set="Simplified Chinese">
        <font-face>AdobeSongStd-Light, Arial Unicode MS, Batang, SimSun</font-face>
      </physical-font>
      <physical-font char-set="Japanese">
        <font-face>MS-Gothic, Hiragino Kaku Gothic Pro, HiraKakuProN-W3, YuGothic, Arial Unicode MS</font-face>
      </physical-font>
      <physical-font char-set="Korean">
        <font-face>AdobeMyungjoStd-Medium, Arial Unicode MS, Batang</font-face>
      </physical-font>
      <physical-font char-set="Symbols">
        <font-face>ZapfDingbats</font-face>
      </physical-font>
      <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>
      </physical-font>
    </logical-font>
  </font-table>
  
</font-mappings>

对于逻辑字体Serif(看46行),如果是中文,映射的物理字体是:AdobeSongStd-Light, Arial Unicode MS, Batang, SimSun。(看50行)

下边,将阿里巴巴普惠体配置到文件中:

<logical-font name="Serif">
  ...
  <physical-font char-set="Simplified Chinese">
    <font-face>
      Alibaba PuHuiTi, AdobeSongStd-Light, Arial Unicode MS, Batang, SimSun
    </font-face>
  </physical-font>
  ...
</logical-font>
<logical-font name="Monospaced">
  ...
  <physical-font char-set="Simplified Chinese">
    <font-face>
      Alibaba PuHuiTi, AdobeSongStd-Light, Arial Unicode MS, Batang, SimSun
    </font-face>
  </physical-font>
  ...
</logical-font>
<logical-font name="Serif">
  ...
  <physical-font char-set="Simplified Chinese">
    <font-face>
      Alibaba PuHuiTi, AdobeSongStd-Light, Arial Unicode MS, Batang, SimSun
    </font-face>
  </physical-font>
  ...
</logical-font>

(分别在3个逻辑字体的中文情况下,加入Alibaba PuHuiTi)

通过以上配置,DITA-OT就能使用阿里巴巴普惠体来显示中文了。

 - 3 -

小结

在DITA-OT中支持中文字体,包括以下3个步骤:

  1. 将内容标识成中文;

  2. 安装中文字体;

  3. 配置字体映射。

 - 4 -

术语

XSLT

XSLT 是一种用于将 XML 文档转换为 XHTML 文档或其他 XML 文档的语言。

参考:

https://www.w3school.com.cn/xsl/index.asp

XSL-FO

XSL-FO 指可扩展样式表语言格式化对象(Extensible Stylesheet Language Formatting Objects),是用于格式化 XML 数据的语言。

参考:

https://www.runoob.com/xslfo/xslfo-tutorial.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值