免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3144 | 回复: 1
打印 上一主题 下一主题

使用Apache FOP将Docbook转换成PDF文档 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-25 20:49 |只看该作者 |倒序浏览

               



使用Apache FOP将Docbook转换成PDF文档
在翻译的
Spring Live
的时候,我就选择了使用 DocBook 来组织文档。但是当我试图使用 Apache FO 把它转换成 PDF 时,问题就出现了。
实际上,到现在为止,我都没有用FOP来真正的转换我的 DocBook 源文件。Spring Live 的PDF文档最终还是由
RenderX
的 XEP 免费个人版来转换的。
使用Apache FOP,首先是要解决的是中文字体支持问题,操作起来比较复杂,一般要经历两个步骤。
1.要支持truetype字体,首先是要生成metrics文件,并且在fop配置文件中进行配置。
2.然后自定义xsl中字体相关的属性。
这里不再重复其步骤细节,具体可以参考:
Apache FOP: Configuration

使用FOP将中文DocBook xml转换成pdf的实现记录
用Google搜索的话可以更多的相关的解决方案,大多是针对早期的0.20.5的版本。
可喜的是最新的Apache FOP 0.95的字体配置已经大大简化,支持自动扫描。参见:
Apache FOP: Fonts

/usr/share/fonts/truetype/
  
第一种方法,在配置文件fonts 标签使用directory,指定字体目录,它有一个可选的属性recursive,设置为true的话,会查找子目录中安装的字体文件。
第二种方法,使用,它会自动扫描系统的字体目录,如Windows系统盘下的C:\Windows
\Fonts,及Linux下的~/.fonts,/usr/share/fonts, /usr/local/share/fonts等。
第一次扫描之后,FOP会将字体信息写入cache,之后使用就会读cache了,不会再扫描字体了,默认cache存放位置是~/.fop/下面。建议在linux下指定directory的方式,不然的话cache文件体积也比较惊人。
但是FOP生成的pdf文档仍然无法让我满意。
当我想在设置font.family使用字体簇时,FOP 0.95无法支持。比如我的设置为:
'Garamond','SimSun'
'Georgia','SimHei'
这种设置的好处是,英文中文分别使用不同的字体输出。
由于Docbook XML生成的FO文件中,默认字符输出使用character-by-character策略,FOP居然还是汉字当成英文字符来处理,导致汉字输出全部为方框。
在满江红翻译的Hibernate 中文文档时,使用FOP转换,正文仅设置使用了SimSun(这样文中的英文字符也是用SimSun生成的),导致文档字体千篇一律,整个文档看起来过于“朴素”。
当我从svn上取得最新的源代码,重新编译使用后,发现这个问题已经不存在了。现在 FOP 终于可以支持字体簇了,参见,
FontSelectionStrategy

从源代码编译的方法参见:
Apache FOP: Building from Source Code

生成的pdf效果如下。


中,上面部分是FOP生成的,下面是用XEP来生成的。FOP生成的文档依然有缺陷,中英字符的对齐方式与XEP有不同,如果用标准的英文书写所用四线格
来说明的话,在FOP中生成的中文底部是与英文底线持平的,而在XEP,中文相对来说向上移了一格,看起来也比较美观。
其它中文问题,如换行时标点位置判断的问题,list的前面的符号显示问题,还没有进行测试。
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/1096/showart_1808039.html

论坛徽章:
0
2 [报告]
发表于 2009-03-09 15:16 |只看该作者
能否给个简单的中文例子?谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP