最新消息:20181230 VPS服务器已从Linode换到腾讯云香港,主题仍用朋友推荐的大前端D8

【部分解决】Docbook中使用fop过程中出错:严重: Couldn’t find hyphenation pattern zh_cn

Docbook crifan 779浏览 0评论

【问题】

Docbook中,使用fop从fo生成pdf过程中,出错:

五月 12, 2012 2:02:32 下午 org.apache.fop.hyphenation.Hyphenator getHyphenationTree
严重: Couldn't find hyphenation pattern zh_cn

【解决过程】

1.首先要说明的是,此处虽然提示“严重”SEVERE,但是对于结果生成的pdf是没影响的,是可以正常显示中文的效果的,即pdf中的“TOC”变成“目录”等。

之前就参考了:问题:zh_cn hyphenation的问题觉得不需要理会此问题的。

但是,后来觉得不爽,想要彻底解决此问题。

2.之前也就在docbook-xsl-ns-1.76.1\common中,看到有zh.xml,zh_cn.xml,zh_tw.xml,但是在xml源码中,不论写成zh,zh_cn,zh_CN,zh-cn等等,都还是会有此提示的,所以一直很困惑。

后来看到官网中关于License Issues部分的解释,再回去看到上面问题:zh_cn hyphenation的问题的解释,以及

fop fails with SEVERE: Couldn’t find hyphenation pattern en (fop-hyph must be packaged)

的解释,才明白,原来是版权问题,导致了,从之前fop集成了fop-hyph,不会出现此警告,到现在由于版权问题,fop不带fop-hyph了,导致出现此问题。

解决办法是,要么直接忽略,不理会此警告,生成的文档同样也是正常的。

要么去参考fop 1.0的:Installing Custom Hyphenation Patterns,去安装对应的hyphenation。此处打算去尝试安装对应的hyphenation。

3.后来参考:

fop warning: "SEVERE: Couldn’t find hyphenation pattern en" (missing fop-hyph package)

从:

http://sourceforge.net/project/showfiles.php?group_id=116740&package_id=129569&release_id=641581

中下载到了:offo-hyphenation-fop-stable_v1.2.zip,然后解压后,再参考其:installation.html,把fop-hyph.jar拷贝到fop的lib文件夹下,再去重新执行xsltproc和fop,然后就没了此提示了。

【总结】

想要解决“ Couldn’t find hyphenation pattern zh_cn”的问题,去下载:

offo-hyphenation-fop-stable_v1.2.zip

然后把fop-hyph.jar拷贝到fop的lib文件夹下,即可。

注意,要重新先运行xsltproc生成fo,再窒息fop,即可发现没了此问题了。

【后记】

前面是白高兴了一场,因为后来发现,原来是之前在xsl中添加了:

<xsl:param name="hyphenate">false</xsl:param>

然后才没了上面的提示的,而改为:

<xsl:param name="hyphenate">true</xsl:param>

之后,问题依旧。

所以,还是要去搞清楚如何解决。

1. 参考:Re: Couldn’t find hyphenation pattern去官网:http://offo.sourceforge.net/ ,然后找到offo-hyphenation-utf8,下载了offo-hyphenation-fop-stable-utf8.zip,解压后,将4.9MB的fop-hyph.jar,放到fop的lib文件夹,替换掉之前的那个700多KB的。结果问题依旧。

2. 又下载了个offo-hyphenation-binary_v2.0.zip,然后用其fop-hyph.jar,结果也是问题依旧。

3.拷贝到build文件夹中,也还是不行。

4.添加了对应的环境变量FOP_HYPHENATION_PATH=E:\Dev_Root\docbook\tools\fop-1.0\build\fop-hyph.jar,结果也还是不行。

5.添加了对应的CLASSPATH,也还是不行。

6.看到offo-hyphenation-fop-stable-utf8的提示说,此版本是针对0.9x编译出来的,然后如果fop版本变化的话,可能就没用了,所以看来还是需要自己手动去编译才行。

7.参考:Information about included languages,去将生成的fo中的原先的zh_cn(或zh_CN,zh-cn,zh-CN等)全部都替换成其所支持的fop中所使用的zh_Latn,然后编译出来的pdf,的确不太一样,有了一点变化,但是却主要是部分行尾的英文,所对应的断字,不太一样:

zh_cn的断字:zh_cn的断字

 

zh_Latn的断字:

zh_Latn的断字

但是这些,也都无关紧要,因为我所关注的,最终的那个特别长的url,即使是zh_Latn,结果也还是无法正确wrap出来,问题依旧。

8.后来,又去故意把原先的xml:lang="zh_cn"改为:xml:lang="en",以为这下,弄了个你肯定能支持的语言,这下断字和wrap等,都该正常了吧,结果问题还是依旧。

而想要说明的是,其中,我已经是参考了:

Breaking long URLs

和相关的配置:

ulink.hyphenate — Allow URLs to be automatically hyphenated
ulink.hyphenate.chars — List of characters to allow ulink URLs to be automatically hyphenated on

去设置了:

<xsl:param name="ulink.hyphenate.chars">/&amp;?-_</xsl:param>
<xsl:param name="ulink.hyphenate">&#x200B;</xsl:param>

结果都还是不行,真的是很无语了。不知道到底如何设置,才能让那个长url能正常wrap和断字。

【总结2】

不过呢,倒是知道了,如果真的想要去掉那个hyphenation的警告,倒是可以像上面那么做:

xml源码中配置为zh_cn:xml:lang="zh_cn",再手动去把生成的fo中的zh_cn替换为zh_Latn,然后fop生成pdf过程中,就没了该警告了,从:

Administrator@K470 /cygdrive/e/Dev_Root/docbook/dev/books/VBR/src
$ E:/Dev_Root/docbook/tools/fop-1.0/fop.cmd -c E:/Dev_Root/docbook/dev/config/fop/conf/fop.xconf ../output/fo/MPEG_VBR.fo -pdf ../output/pdf/MPEG_VBR.pdf             五月 13, 2012 12:14:00 上午 org.apache.fop.apps.FopFactoryConfigurator configure
信息: Default page-height set to: 11in
五月 13, 2012 12:14:00 上午 org.apache.fop.apps.FopFactoryConfigurator configure
信息: Default page-width set to: 8.26in
五月 13, 2012 12:14:02 上午 org.apache.fop.hyphenation.Hyphenator getHyphenationTree
严重: Couldn't find hyphenation pattern zh
五月 13, 2012 12:14:05 上午 org.apache.fop.events.LoggingEventListener processEvent
警告: Line 2 of a paragraph overflows the available area by 28837 millipoints. (See position 105:748)

变为:

Administrator@K470 /cygdrive/e/Dev_Root/docbook/dev/books/VBR/src
$ E:/Dev_Root/docbook/tools/fop-1.0/fop.cmd -c E:/Dev_Root/docbook/dev/config/fop/conf/fop.xconf ../output/fo/MPEG_VBR.fo -pdf ../output/pdf/MPEG_VBR.pdf
五月 13, 2012 12:16:47 上午 org.apache.fop.apps.FopFactoryConfigurator configure
信息: Default page-height set to: 11in
五月 13, 2012 12:16:47 上午 org.apache.fop.apps.FopFactoryConfigurator configure
信息: Default page-width set to: 8.26in
五月 13, 2012 12:16:53 上午 org.apache.fop.events.LoggingEventListener processEvent
警告: Line 2 of a paragraph overflows the available area by 28837 millipoints. (See position 105:748)

了,只是zh_Latn所生成的pdf,和zh_ch生成的pdf,会有个别地方,最后的英文断字部分,zh_Latn会变得更加难看,还没有zh_cn的效果好呢。所以,其实这么做,去除了waring,但是真的是没啥实际意义了。

转载请注明:在路上 » 【部分解决】Docbook中使用fop过程中出错:严重: Couldn’t find hyphenation pattern zh_cn

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
61 queries in 0.072 seconds, using 9.71MB memory