通过ApacheFOP生成PDF文件时常常遇到中文显示为#的问题,这是由于生成的PDF文件没有嵌入相应的中文字体。fopexamplesfoadvanced中有详细的例子文件说明怎样解决这个问题,不再多说。
下面是一个例子,便于快速解决这个问题。
1.建立font metrics文件,对ttc或ttf有不同的方法。
确定系统字体文件夹下的字体文件(微软雅黑字体的路径为C:WINDOWSFontsmsyh.ttf)。
然后在命令提示符下执行如下命令:
TTF字体文件
java -cpc:fopbuildfop.jar;c:foplibavalon-framework-4.2.0.jar;c:foplibcommons-logging-1.0.4.jar;c:foplibcommons-io-1.3.1.jar;c:foplibxmlgraphics-commons-1.4.jarorg.apache.fop.fonts.apps.TTFReader c:windowsfontsmsyh.ttfmsyh.xml
TTC字体文件
java -cpc:fopbuildfop.jar;c:foplibavalon-framework-4.2.0.jar;c:foplibcommons-logging-1.0.4.jar;c:foplibcommons-io-1.3.1.jar;c:foplibxmlgraphics-commons-1.4.jarorg.apache.fop.fonts.apps.TTFReader -ttcname "SimSun"c:windowsfontssimsun.ttc simsun.xml
这样就会在当前文件夹下面生成msyh.xml和simsun.xml文件。
2.登记字体
在FOP主目录下的conf子目录下有一个userconfig.xml文件,在标记区,我们在其中加入以下项:
embed-url="C:WindowsFontsmsyh.ttf">
其中metrics-file里可以设相对路径或绝对路径,font-triplet里的name可以自己自由设定,并不要求与字体名一样。设定这个名字后,在fo里就只能通过这个名字引用这个字体。
3.引用字体
4.编译PDF
fop -c userconfig.xml -q -xml test.xml -xsl test.xsl -pdftest.pdf