FOP使用嵌入字体
在使用FOP转换文件的时候会遇到没有中文字体,中文显示成##的问题。
生成字体矩阵文件
有两种方法,一个是使用命令行,一个是自己写java程序转换,因为我在文档里没有找到明确的提示,网上找到的文章是用的版本也不同,一直没有成功,所以就用了第二种方法,创建一个java程序,使用TTFReader类转换。
package main;
import org.apache.fop.fonts.apps.TTFReader;
public class AddFont {
public static void main(String args[]){
String[] parameters = {
"-ttcname",
"kaiti",
"/home/zhufree/Tools/fop-2.1/conf/kaiti.ttf", "/home/zhufree/Tools/fop-2.1/conf/kaiti.xml", };
TTFReader.main(parameters);
}
}
参数分别是字体ttf文件和生成的xml文件的路径,这里为了方便我直接生成到fop的配置文件夹下了。
运行显示如下
注册字体文件
为了方便,将字体ttf文件和生成的矩阵xml文件放在fop的默认配置文件夹conf中。
在fop.xconf文件中按照提示在font中增加注册字体的部分:
<font metrics-url="kaiti.xml" kerning="yes" embed-url="kaiti.ttf">
<font-triplet name="kaiti" style="normal" weight="normal" />
<font-triplet name="kaiti" style="normal" weight="bold" />
<font-triplet name="kaiti" style="italic" weight="normal" />
<font-triplet name="kaiti" style="italic" weight="bold" />
</font>
运行转换
到这里就可以了,但是我用命令行转换时一直报错找不到字体不知道为什么,后来用程序运行转换成功了,才发现是没有指定配置文件的问题