Docbook的PDF格式输出流程相对HTML而言,是比较复杂的。CSS运用熟练的话,HTML格式输出的效果可以做得很漂亮;不过PDF格式就没那么多选项可供操作了。本文以Docbook常见的emphasis标签为例,介绍如何增强PDF格式输出的效果。
在Docbook的诸多标签中,emphasis算是比较常用的一个。从字面意义上看,它可以用于表示强调。当然了,定义是死的,怎么用它则是用户说了算,例如我打算用它来表示UI中的菜单名,又有何不可呢?
Emphasis属于inline element,即可以放在诸如para这样的标签内,下面是一个实例:
<para>This is an <emphasis>important<emphasis> case.</para>
Emphasis有如下几种用法:
<emphasis>emphasis</emphasis>
<emphasis role=”strong” >strong emphasis</emphasis>
<emphasis role=”bold” >bold emphasis</emphasis>
<emphasis role=”underline” >underline emphasis</emphasis>
以上几种方式都可以用来跟正文字体区别开(如表示强调),在PDF中的显示效果分别为斜体、粗斜体、粗体以及下划线。需要说明的是,这里的PDF效果指的是英文字体的情形。中文字体在后边会继续提及。
在实际的文档工作中,我们发现,PDF格式中的斜体效果在大段的英文中很不明显,无法发挥应有的强调作用。于是,和同事讨论后,决定采用<emphasis role=”bold” >bold emphasis</emphasis>来表示强调,粗体显示效果更好。
前面提过,中文PDF与英文PDF不太一样。基本上,Docbook的PDF格式输出需要嵌入字体才能正常显示中文。问题是,英文字体有font family的概念,如Arial的粗体有Arial Bold,斜体有Arial Italic等,但中文字体一般没这么多变形的啊!什么?你说MS Word可以将中文加粗或倾斜显示?那是微软通过内置算法整出来的,Docbook可没这么强大(确切地说是FO处理程序没这么强大),需要有对应字体才能显示。关于这个问题,常见的对策是使用其他字体来替换,如用黑体替换粗体效果,用楷体替换斜体效果。
这里以Apache FOP为例,假设你已经整理好宋体(作为正文主字体body.font.family)和黑体的字体配置文件了。一般情况下,在fop.xconf中可以这么写:
<font metrics-url=”file:///…/…/SimSun.xml” kerning=”yes” embed-url=”file:///…/…/simsun.ttc”>
<font-triplet name=”SimSun” style=”normal” weight=”normal”/>
<font-triplet name=”SimSun” style=”normal” weight=”bold”/>
<font-triplet name=”SimSun” style=”italic” weight=”normal”/>
<font-triplet name=”SimSun” style=”italic” weight=”bold”/>
</font>
正如前面提过的,斜体和粗体这些形式在中文字体中一般都没有对应的字体,因此凡是遇到这些形式的显示效果时,如果你用上面这种写法的话,全都跟正文字体一样,没有任何区别。<emphasis role=”bold” >bold emphasis</emphasis>这种写法,必须有对应字体才能正确显示出加粗的效果。如要用黑体替换宋体的boldface属性,可以在字体配置文件中添加如下片段:
<font metrics-url=”file:///…/…/SIMHEI.xml” kerning=”yes”
embed-url=”file:///…/…/SIMHEI.ttf”>
<font-triplet name=”SimSun” style=”normal” weight=”bold”/>
</font>
此外,还要删除宋体部分原有的<font-triplet name=”SimSun” style=”normal” weight=”bold”/>。
这样一来,中文PDF也能以粗体(其实是黑体)显示emphasis标签效果了。
我说看着你的网站,怎么有点眼熟呢,原来是前不久折腾docbook时,就来看过你这个帖子的。
握个爪~
握爪,多多交流~
学习了
http://surenpi.com/?s=%E7%94%9F%E6%88%90%E6%96%87%E6%A1%A3