为FOP添加中文字体总结
作者:ade 日期:2010-11-24
从Apache下载了fop-1.0-bin.zip后,试用了下,发现可以很好地将英文的xml文档转换成pdf文件,当有中文的时候就有问题了,因为默认没有注册中文字体. 对应的文档中有一篇介绍了怎样添加,但是很不详细.总结如下:
1. 根据cid-fonts.pdf指示,第一步要为你要添加的字体生成字体矩阵文件(font metrics),方法是调用fop.jar里的一个类,格式是这样的:java org.apache.fop.fonts.apps.PFMReader pfm-file xml-file,其中pfm-file为你的字体文件,xml-file为要生成的字体矩阵文件.举例如下:
java org.apache.fop.fonts.apps.TTFReader C:\Windows\Fonts\simsun.ttc D:\simsun.xml
这样就在D盘下生成了一个宋体的字体矩阵文件.我们把它copy到fop/conf文件夹下.注意这个fop是我解压fop-1.0-bin.zip后,将原来的fop-1.0文件夹重命名为fop文件夹的.
注意要正确运行该命令的类文件在build文件夹下的fop.jar包里,同时需要配合好几个jar包,包括avalon-framework-4.2.0.jar,batik-all-1.7.jar,commons-io-1.3.1.jar,commons-logging-1.0.4.jar,serializer-2.7.0.jar,xalan-2.7.0.jar,xercesImpl-2.7.1.jar,xml-apis-1.3.04.jar,xml-apis-ext-1.3.04.jar,xmlgraphics-commons-1.4.jar等,都在lib文件夹下呢.把这几个包都加到classpath里.另一个比较省事的方法就是把fop.jar包放到lib文件夹下,在该文件夹目录下执行命令.
2. 在FOP中注册字体
编辑conf/userconfig.xml文件,其实在conf下,并没有这个文件,你可以新建一个文件.我们创建一个userconfig.xml
您可以下载我这个文件:点击进入下载userconfig.xml
主要结构与分析容如下:
<?xml version="1.0" encoding="utf-8"?>
<fop version="1.0">
<!--如果在文档中使用了相对url,则以本文档的当前位置为基础搜索寻找-->
<base>.</base>
<!--如果插入到文档中图片的话,要求源图片的分辨率-->
<source-resolution>72</source-resolution>
<!--如果插入到文档中图片的话,输出到文档中后,图片的分辨率-->
<target-resolution>72</target-resolution>
<!--默认页面高度和宽度-->
<default-page-settings height="11in" width="8.26in"/>
<!--渲染器-->
<renderers>
<!--用来生成pdf的渲染器-->
<renderer mime="application/pdf">
<filterList>
<!--使用glib flate进行压缩-->
<value>flate</value>
<!--对二进制数据,使用ascii码显示,默认关闭-->
<!-- <value>ascii-85</value> -->
<!--对二进制数据,使用十六进制显示,默认关闭,不推荐使用,会增加数据的体积-->
<!-- <value>ascii-hex</value> -->
</filterList>
<!--字体设置-->
<fonts>
<!--metrics-url:字体矩阵文件,根据ttc文件生成,kerning为是否允许字间矩调整-->
<font metrics-url="file:///D:/simsun.xml" kerning="yes" embed-url="file:///C:/Windows/Fonts/simsun.ttc">
<!--字体三元组:名字,样式,重量-->
<font-triplet name="Simsun" style="normal" weight="normal" />
<font-triplet name="Simsun" style="normal" weight="bold" />
<font-triplet name="Simsun" style="italic" weight="normal" />
<font-triplet name="Simsun" style="italic" weight="bold" />
</font>
</fonts>
</renderer>
</renderers>
</fop>
3. 我们在fop下新建了一个文件夹名为historycreator.com,在文件夹中,我们有两个文件books.xml和books.xsl,分别是数据和样式表,在cmdfop目录下输入以下命令
fop -c conf/userconfig.xml -xml historycreator.com/books.xml -xsl historycreator.com/books.xsl -pdf historycreator.com/books.pdf
注意这里使用了参数-c,指定使用我们自己写的userconfig.xml为配置文件。
执行结果:在historycreator.com文件夹下生成了一个books.pdf文件,并且可以正确显示中文.
有其他问题欢迎到论坛讨论。
本文原创,转载请注明来自:www.historycreator.com。
如果你说不能执行, 应该不是本文有问题.