DITA OT印刷'#'而不是PDF格式的中文字符

时间:2015-12-10 09:40:10

标签: pdf dita dita-ot

我对DITA OT很新。下载DITA-OT1.5.4_full_easy_install_bin并玩弄它。我试图将简体中文(zh-CN)中的几个字符打印成PDF。我看到字符在XHTML中正确打印,但在PDF中它们打印为"#"。

在命令行中我看到了这个 - "警告:字形"?" (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&amp;添加了这个块。等宽逻辑字体:

<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

任何帮助将不胜感激。感谢。

[编辑] 我看到在temp文件夹中生成的topic.fo文件确实正确包含了中文字符。像这样:

<fo:block font-size="10pt" keep-with-next.within-page="5" start-indent="25pt">職業道德感.</fo:block>

但是我在本文档的任何地方都没有看到与字体相关的信息。

3 个答案:

答案 0 :(得分:1)

首先,您应该设置&#34; xml:lang =&#39; zh_CN&#39;&#34;属性在所有DITA主题和地图的根元素上。这将有助于DITA OT出版决定用于静态文本的语言,例如&#34;表X&#34;并决定用于字体映射的字符集。 然后你应该通过设置参数&#34; clean.temp&#34;来运行发布。参数为&#34; no&#34;。 发布后,您可以在临时文件文件夹中查找名为&#34; topic.fo&#34;的文件。并查看它内部以查看使用的字体系列。 因为即使您在根元素上设置了字体,XSL-FO文件中还有其他位置可以显式设置字体系列。 因此,不应在XSL-FO根元素上设置字体,而应编辑字体映射XML文件和每个逻辑字体&#34; Sans&#34;和&#34; Serif&#34;你应该配置用于中文字符集的实际字体系列,如:

<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

更新: 如果你坚持使用XSLT定制来设置&#34; SimSun&#34;字体作为根元素的字体系列,然后在font-mappings.xml中,您需要为别名定义新的映射:

<aliases>
  <alias name="SimSun">SimSun</alias>
</aliases>

然后将逻辑字体映射到相同font-mappings.xml中的物理字体:

<logical-font name="SimSun">
  <physical-font char-set="Simplified Chinese">
    <font-face>SimSun</font-face>
  </physical-font>
</logical-font>

答案 1 :(得分:0)

抱歉,我无法解答您的问题,但您应该从http://dita-ot.github.io/定义尝试更新的DITA-OT。您的DITA-OT不再受支持。也许你的问题会在最新版本中消失。

答案 2 :(得分:0)

0x611f,此字符是汉字,helvetica是欧洲字体,因此没有此字符为“ helvetica”字体。您可以搜索“ helvetica”字体,在此位置,您的内容(ditamap / dita)应该使用中文字体,而不是欧洲字体。您必须找到包含[font-famliy = helvetical]的arritbute,并在自己的插件[SimSun,Helvetical]中进行修改。