最新消息:VPS服务器又从fzhost.net换回Linode了,主题仍用朋友推荐的大前端D8

【已解决】Docbook用fop生成pdf过程中出现警告:WARNING: Glyph "?" (0x21b5, carriagereturn) not available in font "MicrosoftYaHei".

Docbook crifan 439浏览 0评论

【问题】

前提:

Docbook中,已经有此设置了:

<xsl:param name="title.font.family">Microsoft YaHei</xsl:param>
<xsl:param name="body.font.family">Microsoft YaHei</xsl:param>
<xsl:param name="monospace.font.family">Microsoft YaHei</xsl:param>

<xsl:param name="symbol.font.family">Cambria Math</xsl:param>

然后docbook的xml源码中的某个para中包含unicode为0x21b5的特殊字符:

<para>回车(&crarr;)后再输入:</para>

其中该特殊字符的实体定义为:

<!ENTITY crarr            "&#x021B5;" ><!--DOWNWARDS ARROW WITH CORNER LEFTWARDS -->

用fop编译生成pdf过程中,出现错误:

Jun 6, 2012 5:19:59 PM org.apache.fop.events.LoggingEventListener processEvent
WARNING: Glyph "?" (0x21b5, carriagereturn) not available in font "MicrosoftYaHei".

对应生成的pdf中的字符,由于无合适字体,所以也是被#代替了:

pdf中,特殊的回车字符无法正常显示

现在想要让pdf中可以正常显示此字符。

 

【解决过程】

1.参考了FOP的官网的解释:Missing Glyphs,其也没有给出解决方案。

2.其他很多地方,包括:Subject: RE: XSL-FO and unicode,都提到了,FOP遇到没法正常显示的字体,是不支持字体自动替换的,所以也就出现上述字符无法显示结果被#代替的问题了。

3.其他一些地方,比如:Subject: XSL-FO and unicode主要讨论的还是symbol,而不是我这里的glyph,所以,经过测试,即使去改了symbol.font.family或monospace.font.family,也都是无效果的。

因此我此处的特殊字符,是出于para中间,即对应着的字体应该是body.font.family的,但是此处又不想因为这单独的个别字符,而改变整个pdf的body.font.family字体的设置的。

4.在Windows上安装配置Apache FOP中的评论中,也有人遇到此问题,但是也没有解决办法。

5.官网的Typography中,也没有找到有效的办法。

6.后来参考:Using greek characters with docbook and fop,去把代码改为:

<para>回车(<phrase role="symbol">&crarr;</phrase>)后再输入:</para>

后,结果就可以了,生成的pdf中,就可以正常显示该特殊字符了:

pdf中,特殊的回车字符可以正常显示了

而此处看来是默认的stylesheet中已经包含了role=symbol的处理了,所以不需要我们自己去添加对应的配置了。因此是可以工作的。

【总结】

对于极个别的特殊的字符,如果其所对应的字体(我此处的是由于放在para中所以对应的是body.font.family=雅黑)无法显示的话,但是对应的别的字体(我此处的是symbol是设置的Cambria Math的字体,是包括了该特殊字符的),那么可以通过设置role的方式,让系统对此特殊字符特殊处理,使用你所指定的类型的字体去显示,即可。

对于我此处,即把:

<para>回车(&crarr;)后再输入:</para>

改为:

<para>回车(<phrase role="symbol">&crarr;</phrase>)后再输入:</para>

就可以实现让系统对此特殊字符,使用symbol.font.family所对应的Cambria Math字体,来显示默认的para所对应的微软雅黑所无法显示的unicode值为0x21B5的特殊字符了。

转载请注明:在路上 » 【已解决】Docbook用fop生成pdf过程中出现警告:WARNING: Glyph "?" (0x21b5, carriagereturn) not available in font "MicrosoftYaHei".

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
13 queries in 0.219 seconds, using 10.51MB memory