版本:fop2.5
fop目前存在的缺点:
1、不支持水印 --可借助adobe acfobat工具或使用脚本实现
2、不支持文本自动换行 --自实现不确定是否支持,不确认是否有字符宽度计算api
3、中文字体兼容性操作麻烦 --需生成中文字符矩阵,嵌入到配置中
乱码效果:
FOP中文乱码问题解决:
1、下载fop包并解压
2、利用fop包中提供的工具生成中文字符矩阵,这里用“宋体”示例:
命令:
java -cpc:\fop\build\fop.jar;c:\fop\lib\commons-logging-1.0.4.jar;c:\fop\lib\commons-io-1.3.1.jar;c:\fop\lib\xmlgraphics-commons-2.4.jar org.apache.fop.fonts.apps.TTFReader -ttcname "simsun" c:\windows\fonts\simsun.ttc simsun.xml
生成的文件示例:
3、fop配置文件中添加字体配置, 可参考conf/fop.xconf配置文件
1)此处仅使用pdf生成,去掉配置中其他文件类型渲染配置
2)关闭pdf文件渲染下的字体自动扫描配置 --字体扫描加载比较慢,也比教占用资源
<!-- auto-detect fonts --><auto-detect/>
3)添加需嵌入的字体,配置如下
<!--新宋体//--><font metrics-url="file:///E:/IdeaProjects/fop-2.5/simsun.xml" kerning="yes" embed-url="file:///C:/Windows/Fonts/simsun.ttc"><font-triplet name="simsun" style="normal" weight="normal" /><font-triplet name="simsun2" style="normal" weight="bold" /><font-triplet name="simsun3" style="italic" weight="normal" /><font-triplet name="simsun4" style="italic" weight="bold" /></font>
【注】xml中url使用磁盘全路径需加上“file:///”前缀,否则解析异常,报:
.MalformedURLException: unknown protocol: e
4、Fop配置文件加载方式:
DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder();Configuration cfg = cfgBuilder.buildFromFile(new File("E:/IdeaProjects/fop-2.5/fop.xml"));FopFactoryBuilder fopFactoryBuilder = new FopFactoryBuilder(new File(".").toURI()).setConfiguration(cfg);// configure fopFactory as desiredfinal FopFactory fopFactory = fopFactoryBuilder.build();
【注】不同版本的api有差异,具体版本请参见apache官网 快速入门-> 配置 FOP:/fop/2.5/configuration.html