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

DITA-OT发布过程和中文支持相关推荐

  1. PrestaShop - 技术百科 - PrestaShop是一个100%免费的外贸跨境电子商务购物车平台,中文支持非常友好且面向国际化

    PrestaShop – 技术百科 – PrestaShop是一个100%免费的外贸跨境电子商务购物车平台,中文支持非常友好且面向国际化 PrestaShop PrestaShop是一个100%免费的 ...

  2. HoloLens 2 打包发布过程中 常见问题汇总(长期更新)

    HoloLens 2 打包发布过程中 常见问题汇总(长期更新)                   目 录 1. Unity 中发布Hololens的时候界面变灰,提示无发布权限. 2. Unity发 ...

  3. jesd204b应用指南中文_Novation 发布 Summit 合成器中文用户指南

    Novation 发布 Summit 合成器中文用户指南感谢购买Summit 16复音双声部合成器.它是novation至今开发的声音最佳合成器.Summit是novation桌面式合成器Peak的进 ...

  4. matlab2018无法使用qcat,解决Matlab 2018a源代码的中文支持问题

    1. 问题 Matlab 2018a源代码的中文支持问题: Matlab软件要求源文件mfile采用GBK编码.但是在调用程序过程中,程序有时候必须用UTF-8编码,例如shaperead中文地图程序 ...

  5. 在VB中INI文件的读写、删除(对中文支持很好)

    很多时候我们编一个程序不一定要用到注册表来保存设置(如果说一个程序没有设置就不算好程序了).INI是一个很好的选择.有人说,Savesetting是一个不错的选择,但是我了解到,不能永久的保存(起码在 ...

  6. Android adb “push pull”中文支持解决方案

    Android adb "push pull"中文支持解决方案 在windows底下文件(夹)命名所采用的是GBK编码,而在Android中采用的UTF-8编码,所有使用adb 的 ...

  7. java通字乱码_Java解决通信过程的中文乱码的问题

    Java解决通信过程的中文乱码的问题 前言: Java的编程中,经常会碰到汉字的处里及显示的问题,比如一大堆乱码或问号. 这是因为JAVA中默认的编码方式是UNICODE,而中国人通常使用的文件和DB ...

  8. matlab2018a字体乱码怎么办,解决Matlab 2018a源代码的中文支持问题

    1. 问题 Matlab 2018a源代码的中文支持问题: Matlab软件要求源文件mfile采用GBK编码.但是在调用程序过程中,程序有时候必须用UTF-8编码,例如shaperead中文地图程序 ...

  9. puppy linux安装中文包,Puppy Linux 4.00 的中文支持包

    欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 Puppy Linux 4.00 不到88MB大小,但它自带了大量的描扫仪.打印机.数码相机的驱动以及音乐录制/编辑/转换 ...

最新文章

  1. 解答关于学习前端的一些问题
  2. PGA内存作用和构成
  3. c# 正则表达式笔记
  4. 21.判断栈弹出顺序是否正确
  5. kodi资源_kodi 展示播放 NAS 电影
  6. 对 Lotus Notes 邮件模版进行二次开发的最佳实践
  7. (转)华为面试题算什么,这个背会了外企随便进
  8. Redis和Memcache和MongoDB简介及区别分析(整理)
  9. python: Requests库的一些高级特性
  10. HTML中进行居中设置
  11. 小学计算机房荷载,资深暖通设计师总结的常用参数参考值,新手们都说感谢大神支招...
  12. android模拟器安装教程视频教程,安卓模拟器安装教程 安卓模拟器怎么安装
  13. autojs遍历当前页面所有控件_移动端控件(一)-弹窗(Alert/Dialog)
  14. Android解决监听AppBarLayout的滑动状态来动态设置标题时报requestLayout() improperly called by错误问题
  15. 仿掌阅实现书籍打开动画
  16. 考toeic心得。。。。
  17. 模糊控制洗衣机MATLAB模型,基于matlab的洗衣机模糊控制仿真
  18. C语言快速幂(入门讲解)
  19. WiFi共享精灵与路由器
  20. C#下载文件的方法包含本地下载,http下载,以及返回字节流方法

热门文章

  1. 动效之文字滚动5个代码
  2. ensp 移动主机搜索不到AP信道_公司刚买了一个TPlink AC300无线控制器,5个AP如何调试?...
  3. GAN之父Ian Goodfellow回归谷歌!将在DeepMind远程办公
  4. SMB共享文件夹操作
  5. 安天移动安全助力银行卡检测中心智能POS安全检测
  6. Kotlin之Fragment中直接引用视图控件id
  7. 基于tiva的匿名飞控学习笔记(1)
  8. 初学者关于ztree的浅谈
  9. CentOS 7如何连接无线网络
  10. 24V-5V/12V 高效率转压板设计(附电路原理图和pcb)