本文记录了我在配置使用Apache FOP时遇到的错误以及解决方法。一方面是做个记录,将来再遇到此类问题时可以查询;另一方面也希望对其它遇到同样问题的人有所帮助。
-
问题:fo:inline错误
解决:
转换vim使用进阶到PDF时,遇到了下面这样一个问题(完整错误信息见fo:inline错误):
javax.xml.transform.TransformerException: org.apache.fop.fo.ValidationException: file:/home/easwy/tmp/advancedvim/pdf/vim_advanced_usage.fo:173:59: Error(173/59): fo:inline is not a valid child element of fo:flow. at org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:168) at org.apache.fop.cli.InputHandler.renderTo(InputHandler.java:115) at org.apache.fop.cli.Main.startFOP(Main.java:166) at org.apache.fop.cli.Main.main(Main.java:197)
看错误提示,是说fo:inline不是fo:flow元素的有效子结点。在网上搜了一下没找到有用的信息。仔细检查出错的位置,终于发现错误的原因,错误出在下面这个语句:
<emphasis role='bold'> [文件浏览] </emphasis> <para> ... </para>
在上面的emphasis元素是一个inline元素,对于这种inline元素来讲,一定要包含在某个块元素中。而上面的语句中,emphasis不属于任何一个para,所以出现上述错误。
把上面的语句改成下面的形式,错误消除:
<para><emphasis role='bold'> [文件浏览] </emphasis></para> <para> ... </para>
-
问题:转换PNG插图时出现空指针异常
解决:
还是在转换vim使用进阶时,出现下面的空指针异常(详细错误信息见PNG插件导致的空指针异常):
严重: Exception java.lang.NullPointerException at org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:168) at org.apache.fop.cli.InputHandler.renderTo(InputHandler.java:115) at org.apache.fop.cli.Main.startFOP(Main.java:166) at org.apache.fop.cli.Main.main(Main.java:197)
经排除,这个异常是在转换下面的语句时发生的:
<informalfigure> <mediaobject> <alt>在vim中使用gdb调试 - vimgdb</alt> <imageobject> <imagedata fileref='https://blog.easwy.com/uploads/2009/03/vimgdb2-300x216.png' align='center'/> </imageobject> </mediaobject> <caption align='center'><link xlink:href='https://blog.easwy.com/uploads/2009/03/vimgdb2.png' xlink:show='new'>点击查看大图</link></caption> </informalfigure>
如果把imagedata中文件的URL换成JPG格式的图像文件,则转换正常。一旦使用PNG格式的文件,就会出现上面的空指针异常提示。在网上也没找到解决办法,查看了一下自己的FOP版本:
FOP Version 0.94
猜想可能这是旧版本的BUG,于是下载了最新的FOP trunk版本,进行编译:
svn co http://svn.apache.org/repos/asf/xmlgraphics/fop/trunk/ ant all
使用这个版本再进行转换,果然错误消除。
-
问题:zh_cn hyphenation的问题
解决:
在我的docbook文档中,都加有xml:lang=’zh-CN’这样的标志,指明本文档的语言是中文简体。
但每次进行PDF文件转换时,都有下面的提示:
严重: Couldn't find hyphenation pattern zh_cn
在网上搜了一下,感觉这应该不是一个问题。对其它西文语言如英语、法语等,它们以单词为单位,单词之间采用空格隔开,如果单词太长需要换行时,就要在合适的地方加上一个连字符”-“。但对中文来讲,根本没有这个需要。所以这个错误提示忽略即可。
不过,如果提示你找不到其它语言的hyphenation,例如找不到en_US的hyphenation,就需要到Objects For Formatting Objects(OFFO)去下载,出于版权方面的考虑,hyphenation缺省不再包含在FOP中了。
@王兴朝
你的问题与zh_cn hyphenation没有关系,应该是中文字体没有设置好。
你可以看看我的这篇文章,也许有帮助:
使用Apache FOP将Docbook文档转换成PDF
楼主,你好!我想问一下关于”zh_cn hyphenation的问题”
我生成的pdf格式的文档中文就显示不出来,(凡是应该显示汉字的地方全部显示为’#’),不知道楼主能不能给解答一下?谢谢啦!
@rjz
我用的主题是inove,作者是mg12,在页面的最下方可以找到主题作者站点的链接。
我想请问一下博主,您的worldpress用的是哪一个版本啊,怎么这么清爽,呵呵。
谢谢