首先,有些链接很有帮助:
使用FOP将中文DocBook xml转换成pdf的实现记录
使用Apache FOP将Docbook转换成PDF文档
Apache FOP: Fonts
1、准备工作
docbook转换为pdf有很多方式,我用的是docbook->fo->pdf
为此需要安装fop,另外,我也安装了xmlto(使用xsltproc应该也可以),当然还要有docbook-xsl。
2、配置工作
这部分是花费时间最多的。主要的原因是上面提到的资料中有很多不是针对ubuntu8.10的,所以有些配置文件找不到地方,下面是详细的步骤:
第一个配置是把docbook转换为fo使用的xsl,系统缺省使用/usr/share/xml/docbook/stylesheet/nwalsh/fo/docbook.xsl。由于需要使用中文,所以需要自己定义一个。我的文件名是myfo.xsl,内容如下:
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:ng="http://docbook.org/docbook-ng"
xmlns:db="http://docbook.org/ns/docbook"
exclude-result-prefixes="db ng exsl" version='1.0'>
<xsl:import href="/usr/share/xml/docbook/stylesheet/nwalsh/fo/docbook.xsl" />
<xsl:param name="body.font.family">WenQuanYiZenHei</xsl:param>
<xsl:param name="body.font.size">10</xsl:param>
<xsl:param name="monospace.font.family">Monaco</xsl:param>
<xsl:param name="title.font.family">WenQuanYiZenHei</xsl:param>
<xsl:param name="page.margin.inner">2cm</xsl:param>
<xsl:param name="page.margin.outer">2cm</xsl:param>
<xsl:param name="hyphenate">false</xsl:param>
<xsl:param name="paper.type" select="'A4'" />
<xsl:param name="draft.mode" select="'no'" />
</xsl:stylesheet>
需要注意的就是红色部分的字体,需要指定中文字体,ubuntu下面用的是文泉驿的字体,所以就用WenQuanYiZenHei。
第二个配置文件是字体相关文件,上面的资料里面提到使用java org.apache.fop.fonts.apps.TTFReader C:\WINNT\Fonts\simsun.ttc simsun.xml 或者是类似的方式,可是我在实验的过程中发现ubuntu的fop包里面包含了一个fop-ttfreader脚本,很容易使用,在命令行键入:
代码: 全选
fop-ttfreader /usr/share/fonts/truetype/wqy/wqy-zenhei.ttf ./wqy-zenhei.xml
第三个是需要把上面生成的xml告诉fop,需要修改或者新建一个fop.xconf文件。这个文件在ubuntu的fop包里面没有,我去
http://svn.apache.org/viewvc/xmlgraphic ... nf?view=co下载了一个,并且做了以下修改:
<font metrics-url="wqy-zenhei.xml" kerning="yes" embed-url="/usr/share/fonts/truetype/wqy/wqy-zenhei.ttf">
<font-triplet name="WenQuanYiZenHei" style="normal" weight="normal"/>
</font>
至此,配置工作基本结束。另外,上面三个配置文件我都放在~/work/docbook/目录下面,和我的docbook文档放在一起。
3、转换工作
这个就比较简单了,先通过myfo.xsl把docbook的文档转换为fo文件:
代码: 全选
xmlto -x myfo.xsl fo test.xml
然后,使用fop命令:
代码: 全选
fop -c fop.xconf test.fo test.pdf
实际上,这些工作很多地方都有介绍,包括我上面提到的三个帖子。不过,由于我使用的ubuntu中提供的包,有些具体的细节大部分资料里面都没有提到,所以写个帖子算是记录一下吧。
另外,中文断字还有字体簇的支持我还没有试,不过参考上面几个帖子应该不是难事。