DITA OT 在 PDF 中打印'#'而不是汉字
DITA OT printing '#' in stead of Chinese characters in PDF
我是 DITA OT 的新手。下载了 DITA-OT1.5.4_full_easy_install_bin 并开始使用它。我正在尝试将简体中文 (zh-CN) 中的几个字符打印到 PDF 中。我看到这些字符在 XHTML 中打印正确,但在 PDF 中它们打印为“#”。
在命令行中我看到这个 - "Warning: Glyph "?" (0x611f) 在字体 "Helvetica" 中不可用。
以下是我到目前为止尝试过的方法:
在 demo\fo\fop\conf\fop.xconf 中:
<fonts>
<font kerning="yes"
embed-url="file:///C:/Windows/Fonts/simsun.ttc"
embedding-mode="subset" encoding-mode="cid">
<font-triplet name="SimSun" style="normal" weight="normal"/>
</font>
<auto-detect/>
<directory recursive="true">C:\Windows\Fonts</directory>
</fonts>
在 demo\fo\cfg\fo\attrs\custom.xsl 中:
<xsl:attribute-set name="__fo__root">
<xsl:attribute name="font-family">SimSun</xsl:attribute>
</xsl:attribute-set>
在 demo\fo\cfg\fo\font-mapping.xml 中为 Sans、Serif 和 Monospaced 逻辑字体添加了此块:
<physical-font char-set="Simplified Chinese">
<font-face>SimSun</font-face>
</physical-font>
在samples\concepts\garageconceptsoverview.xml :
<shortdesc xml:lang="zh_CN">職業道德感.</shortdesc>
这是我用来生成 PDF 的命令:
ant -Dargs.input=samples\hierarchy.ditamap -Dtranstype=pdf
如有任何帮助,我们将不胜感激。谢谢。
[编辑]
我看到在临时文件夹中生成的 topic.fo 文件确实包含正确的中文字符。像这样:
<fo:block font-size="10pt" keep-with-next.within-page="5" start-indent="25pt">職業道德感.</fo:block>
但是我在这个文档的任何地方都没有看到字体相关的信息。
抱歉,我无法回答您的问题,但您应该尝试使用 http://dita-ot.github.io/ 的更新版 DITA-OT。您的 DITA-OT 不再受支持。使用最新版本也许您的问题会消失。
首先,您应该为所有 DITA 主题和映射的根元素设置 "xml:lang='zh_CN'" 属性。这将有助于 DITA OT 发布决定用于静态文本(如 "Table X")的语言,以及决定用于字体映射的字符集。
然后你应该 运行 通过将参数 "clean.temp" 参数设置为 "no" 来发布。
发布后,您可以在临时文件夹中查找名为 "topic.fo" 的文件,并查看其中使用了哪些字体系列。
因为即使您在根元素上设置了字体,XSL-FO 文件中的其他地方也有显式设置的字体系列。
因此,与其在 XSL-FO 根元素上设置字体,不如编辑字体映射 XML 文件,对于每个逻辑字体 "Sans" 和 "Serif",您应该配置实际的字体系列用于中文字符集,类似于:
<logical-font name="Sans">
.........
<physical-font char-set="Simplified Chinese">
<font-face>SimSun</font-face>
</physical-font>
......
</logical-font>
有关字体映射如何工作的更多信息:
https://www.oxygenxml.com/doc/versions/17.0/ug-editor/#topics/DITA-map-set-font-Apache-FOP.html
更新:
如果您坚持使用将 "SimSun" 字体设置为根元素上的字体系列的 XSLT 自定义,那么在 font-mappings.xml 中,您需要为别名定义一个新映射:
<aliases>
<alias name="SimSun">SimSun</alias>
</aliases>
然后将逻辑字体映射到相同字体的物理字体-mappings.xml:
<logical-font name="SimSun">
<physical-font char-set="Simplified Chinese">
<font-face>SimSun</font-face>
</physical-font>
</logical-font>
0x611f,这个字是汉字(感),helvetica是欧洲字体,所以"helvetica"字库里没有这个字。你可以搜索这个"helvetica"字体loaction,在这个位置你的内容(ditamap/dita)应该使用中文字体,而不是欧洲字体。你必须找到包含[font-famliy=helvetical]的字体,在你自己的插件[SimSun, Helvetical]中修改。
我是 DITA OT 的新手。下载了 DITA-OT1.5.4_full_easy_install_bin 并开始使用它。我正在尝试将简体中文 (zh-CN) 中的几个字符打印到 PDF 中。我看到这些字符在 XHTML 中打印正确,但在 PDF 中它们打印为“#”。
在命令行中我看到这个 - "Warning: Glyph "?" (0x611f) 在字体 "Helvetica" 中不可用。以下是我到目前为止尝试过的方法:
在 demo\fo\fop\conf\fop.xconf 中:
<fonts>
<font kerning="yes"
embed-url="file:///C:/Windows/Fonts/simsun.ttc"
embedding-mode="subset" encoding-mode="cid">
<font-triplet name="SimSun" style="normal" weight="normal"/>
</font>
<auto-detect/>
<directory recursive="true">C:\Windows\Fonts</directory>
</fonts>
在 demo\fo\cfg\fo\attrs\custom.xsl 中:
<xsl:attribute-set name="__fo__root">
<xsl:attribute name="font-family">SimSun</xsl:attribute>
</xsl:attribute-set>
在 demo\fo\cfg\fo\font-mapping.xml 中为 Sans、Serif 和 Monospaced 逻辑字体添加了此块:
<physical-font char-set="Simplified Chinese">
<font-face>SimSun</font-face>
</physical-font>
在samples\concepts\garageconceptsoverview.xml :
<shortdesc xml:lang="zh_CN">職業道德感.</shortdesc>
这是我用来生成 PDF 的命令:
ant -Dargs.input=samples\hierarchy.ditamap -Dtranstype=pdf
如有任何帮助,我们将不胜感激。谢谢。
[编辑] 我看到在临时文件夹中生成的 topic.fo 文件确实包含正确的中文字符。像这样:
<fo:block font-size="10pt" keep-with-next.within-page="5" start-indent="25pt">職業道德感.</fo:block>
但是我在这个文档的任何地方都没有看到字体相关的信息。
抱歉,我无法回答您的问题,但您应该尝试使用 http://dita-ot.github.io/ 的更新版 DITA-OT。您的 DITA-OT 不再受支持。使用最新版本也许您的问题会消失。
首先,您应该为所有 DITA 主题和映射的根元素设置 "xml:lang='zh_CN'" 属性。这将有助于 DITA OT 发布决定用于静态文本(如 "Table X")的语言,以及决定用于字体映射的字符集。 然后你应该 运行 通过将参数 "clean.temp" 参数设置为 "no" 来发布。 发布后,您可以在临时文件夹中查找名为 "topic.fo" 的文件,并查看其中使用了哪些字体系列。 因为即使您在根元素上设置了字体,XSL-FO 文件中的其他地方也有显式设置的字体系列。 因此,与其在 XSL-FO 根元素上设置字体,不如编辑字体映射 XML 文件,对于每个逻辑字体 "Sans" 和 "Serif",您应该配置实际的字体系列用于中文字符集,类似于:
<logical-font name="Sans">
.........
<physical-font char-set="Simplified Chinese">
<font-face>SimSun</font-face>
</physical-font>
......
</logical-font>
有关字体映射如何工作的更多信息:
https://www.oxygenxml.com/doc/versions/17.0/ug-editor/#topics/DITA-map-set-font-Apache-FOP.html
更新: 如果您坚持使用将 "SimSun" 字体设置为根元素上的字体系列的 XSLT 自定义,那么在 font-mappings.xml 中,您需要为别名定义一个新映射:
<aliases>
<alias name="SimSun">SimSun</alias>
</aliases>
然后将逻辑字体映射到相同字体的物理字体-mappings.xml:
<logical-font name="SimSun">
<physical-font char-set="Simplified Chinese">
<font-face>SimSun</font-face>
</physical-font>
</logical-font>
0x611f,这个字是汉字(感),helvetica是欧洲字体,所以"helvetica"字库里没有这个字。你可以搜索这个"helvetica"字体loaction,在这个位置你的内容(ditamap/dita)应该使用中文字体,而不是欧洲字体。你必须找到包含[font-famliy=helvetical]的字体,在你自己的插件[SimSun, Helvetical]中修改。