当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 2 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 8.10下面把中文docbook转换为pdf
帖子发表于 : 2009-04-06 23:51 

注册: 2005-12-21 17:37
帖子: 21
送出感谢: 0 次
接收感谢: 0 次
这两天一直在鼓捣这个,上网找了很多资料,终于有点收获,写出来抛砖引玉。
首先,有些链接很有帮助:
使用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/xmlgraphics/fop/tags/fop-0_95/conf/fop.xconf?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

得到了一个test.fo文件
然后,使用fop命令:
代码:
fop -c fop.xconf test.fo test.pdf

这样就可以在test.pdf中看到中文了。
实际上,这些工作很多地方都有介绍,包括我上面提到的三个帖子。不过,由于我使用的ubuntu中提供的包,有些具体的细节大部分资料里面都没有提到,所以写个帖子算是记录一下吧。
另外,中文断字还有字体簇的支持我还没有试,不过参考上面几个帖子应该不是难事。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 8.10下面把中文docbook转换为pdf
帖子发表于 : 2009-05-13 17:00 

注册: 2007-12-27 10:13
帖子: 56
地址: shanghai
送出感谢: 0 次
接收感谢: 0 次
照楼上的做了,转成PDF后中文还是显示为#,不知道是为什么?
最后操作好像有点问题

djstava@djstava:~/execise/docbook$ sudo fop -c fop.xconf test.fo test.pdf
[warning] /usr/bin/fop: Unable to locate servlet-api in /usr/share/java
2009-5-13 16:56:55 org.apache.fop.apps.FopFactoryConfigurator configure
信息: Default page-height set to: 11in
2009-5-13 16:56:55 org.apache.fop.apps.FopFactoryConfigurator configure
信息: Default page-width set to: 8.26in
2009-5-13 16:56:56 org.apache.fop.fonts.FontInfo notifyFontReplacement
警告: Font 'Symbol,normal,700' not found. Substituting with 'Symbol,normal,400'.
2009-5-13 16:56:56 org.apache.fop.fonts.FontInfo notifyFontReplacement
警告: Font 'ZapfDingbats,normal,700' not found. Substituting with 'ZapfDingbats,normal,400'.
2009-5-13 16:56:56 org.apache.fop.fonts.FontInfo notifyFontReplacement
警告: Font 'WenQuanYiZenHei,normal,700' not found. Substituting with 'any,normal,700'.


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 2 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译