天天看点

FOP使用嵌入字体FOP使用嵌入字体

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的配置文件夹下了。

运行显示如下

FOP使用嵌入字体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>
           

运行转换

到这里就可以了,但是我用命令行转换时一直报错找不到字体不知道为什么,后来用程序运行转换成功了,才发现是没有指定配置文件的问题

FOP使用嵌入字体FOP使用嵌入字体