为FOP添加中文字体总结

从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


文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: fop
相关日志:
评论: 2 | 引用: 0 | 查看次数: -
回复回复ade[2013-03-01 12:11 AM | del]
hello朋友, 本文是原创, 是本人亲手试验, 并且开发中使用过的, 肯定是可以的.

如果你说不能执行, 应该不是本文有问题.
回复回复hello[2012-11-15 11:58 AM | del]
拜托你们执行一下;都不行;还敢往上写
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.