• 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

    内容如下:

    1. "1.0"?>
    2. <font-mappings>
    3. <font-table>
    4. <aliases>
    5. <alias name="serif">Serifalias>
    6. aliases>
    7. <aliases>
    8. <alias name="sans-serif">Sansalias>
    9. aliases>
    10. <aliases>
    11. <alias name="monospace">Monospacedalias>
    12. aliases>
    13. <aliases>
    14. <alias name="Helvetica">Normalalias>
    15. aliases>
    16. <aliases>
    17. <alias name="Courier">Monospacedalias>
    18. aliases>
    19. <logical-font name="Sans">
    20. <physical-font char-set="default">
    21. <font-face>Helvetica, Arial Unicode MS, Tahoma, Batang, SimSunfont-face>
    22. physical-font>
    23. <physical-font char-set="Simplified Chinese">
    24. <font-face>AdobeSongStd-Light, Arial Unicode MS, Batang, SimSunfont-face>
    25. physical-font>
    26. <physical-font char-set="Japanese">
    27. <font-face>MS-Gothic, Hiragino Kaku Gothic Pro, HiraKakuProN-W3, YuGothic, Arial Unicode MSfont-face>
    28. physical-font>
    29. <physical-font char-set="Korean">
    30. <font-face>AdobeMyungjoStd-Medium, Arial Unicode MS, Batangfont-face>
    31. physical-font>
    32. <physical-font char-set="Symbols">
    33. <font-face>ZapfDingbatsfont-face>
    34. physical-font>
    35. <physical-font char-set="SubmenuSymbol">
    36. <font-face>ZapfDingbatsfont-face>
    37. physical-font>
    38. <physical-font char-set="SymbolsSuperscript">
    39. <font-face>Helvetica, Arial Unicode MSfont-face>
    40. <baseline-shift>20%baseline-shift>
    41. <override-size>smalleroverride-size>
    42. physical-font>
    43. logical-font>
    44. <logical-font name="Serif">
    45. <physical-font char-set="default">
    46. <font-face>Times New Roman, Times, Arial Unicode MS, Tahoma, Batang, SimSunfont-face>
    47. physical-font>
    48. <physical-font char-set="Simplified Chinese">
    49. <font-face>AdobeSongStd-Light, Arial Unicode MS, Batang, SimSunfont-face>
    50. physical-font>
    51. <physical-font char-set="Japanese">
    52. <font-face>MS-Mincho, Hiragino Mincho Pro, HiraMinProN-W3, YuMincho, Arial Unicode MSfont-face>
    53. physical-font>
    54. <physical-font char-set="Korean">
    55. <font-face>AdobeMyungjoStd-Medium, Arial Unicode MS, Batangfont-face>
    56. physical-font>
    57. <physical-font char-set="Symbols">
    58. <font-face>ZapfDingbatsfont-face>
    59. physical-font>
    60. <physical-font char-set="SubmenuSymbol">
    61. <font-face>ZapfDingbatsfont-face>
    62. physical-font>
    63. <physical-font char-set="SymbolsSuperscript">
    64. <font-face>Times New Roman, Times, Arial Unicode MS, Tahoma, Batangfont-face>
    65. <baseline-shift>20%baseline-shift>
    66. <override-size>smalleroverride-size>
    67. physical-font>
    68. logical-font>
    69. <logical-font name="Monospaced">
    70. <physical-font char-set="default">
    71. <font-face>Courier New, Courier, Arial Unicode MS, Tahoma, Batang, SimSunfont-face>
    72. physical-font>
    73. <physical-font char-set="Simplified Chinese">
    74. <font-face>AdobeSongStd-Light, Arial Unicode MS, Batang, SimSunfont-face>
    75. physical-font>
    76. <physical-font char-set="Japanese">
    77. <font-face>MS-Gothic, Hiragino Kaku Gothic Pro, HiraKakuProN-W3, YuGothic, Arial Unicode MSfont-face>
    78. physical-font>
    79. <physical-font char-set="Korean">
    80. <font-face>AdobeMyungjoStd-Medium, Arial Unicode MS, Batangfont-face>
    81. physical-font>
    82. <physical-font char-set="Symbols">
    83. <font-face>ZapfDingbatsfont-face>
    84. physical-font>
    85. <physical-font char-set="SymbolsSuperscript">
    86. <font-face>Courier New, Courier, Arial Unicode MS, Tahoma, Batangfont-face>
    87. <baseline-shift>20%baseline-shift>
    88. <override-size>smalleroverride-size>
    89. physical-font>
    90. logical-font>
    91. font-table>
    92. font-mappings>

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

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

    1. <logical-font name="Serif">
    2. ...
    3. <physical-font char-set="Simplified Chinese">
    4. <font-face>
    5. Alibaba PuHuiTi, AdobeSongStd-Light, Arial Unicode MS, Batang, SimSun
    6. font-face>
    7. physical-font>
    8. ...
    9. logical-font>
    10. <logical-font name="Monospaced">
    11. ...
    12. <physical-font char-set="Simplified Chinese">
    13. <font-face>
    14. Alibaba PuHuiTi, AdobeSongStd-Light, Arial Unicode MS, Batang, SimSun
    15. font-face>
    16. physical-font>
    17. ...
    18. logical-font>
    19. <logical-font name="Serif">
    20. ...
    21. <physical-font char-set="Simplified Chinese">
    22. <font-face>
    23. Alibaba PuHuiTi, AdobeSongStd-Light, Arial Unicode MS, Batang, SimSun
    24. font-face>
    25. physical-font>
    26. ...
    27. 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

  • 相关阅读:
    狄克斯特拉(Dijkstra)算法详解
    leetCode 121.买卖股票的最佳时机 动态规划 + 状态转移
    SQL语言的分类:DDL(数据库、表的增、删、改)、DML(数据的增、删、改)
    “不要用 Edge 默认的必应,我被骗了”
    7个最佳开源免费库存/仓库管理系统(WMS)
    第15章、 友元、异常和其他
    技能篇:linux服务性能问题排查及jvm调优思路
    pycharm 断点调试python Flask
    LLDB-调试
    308节---------6月26日
  • 原文地址:https://blog.csdn.net/long_jj/article/details/126453107