extremecomponents pdf 导出中文问题分析

[b]步骤一:准备工作[/b]
1.在网上下载源代码eXtremeComponents-1.0.1-with-dependencies.zip
其中目录\lib\pdf下提供对pdf导出的支持包
avalon-framework-4.0.jar
batik-1.5-fop-0.20-5.jar
fop-0.20.5.jar
xalan-2.5.1.jar
xercesImpl-2.6.1.jar
xml-apis-2.0.2.jar
2.在网上下载fop-0.95beta-src.zip,下载地址:http://apache.mirror.phpchina.com/xmlgraphics/fop/source/
[color=red]在该版本或其他fop版本(fop-0.20.5rc2.jar)中找到/conf/userconfig.xml[/color]
3.找到系统字体文件位置,本人系统为 xp home edition版本
在C:\WINDOWS\Fonts目录下搜索 *.ttf文件,在查找结果列表中,我们发现中文字体有simkai.ttf(楷体),simhei.ttf(黑体),simfang.ttf(仿宋)等

[b]步骤二:生成xml文件工作[/b]
在fop源代码中,org.apache.fop.fonts.apps.TTFReader 系统ttf文件位置 生成xml文件名
java org.apache.fop.fonts.apps.TTFReader C:\WINDOWS\Fonts\simkai.ttf simkai.xml
java org.apache.fop.fonts.apps.TTFReader C:\WINDOWS\Fonts\simhei.ttf simhei.xml
java org.apache.fop.fonts.apps.TTFReader C:\WINDOWS\Fonts\simfang.ttf simfang.xml

[b]步骤三:在工程中配置[/b]
1.web.xml
<filter>
<filter-name>eXtremeExport</filter-name>
<filter-class>
org.extremecomponents.table.filter.ExportFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>eXtremeExport</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<context-param>
<param-name>extremecomponentsPreferencesLocation</param-name>
<param-value>/conf/extremetable.properties</param-value>
</context-param>
2.将步骤一2操作中userconfig.xml文件放到工程类路径conf下面,编辑该xml文件
<fonts>
<font metrics-file="[color=red]simkai.xml文件放置的绝对路径[/color]" kerning="yes" embed-file="[color=red]simkai.ttf文件放置的绝对路径[/color]">
<font-triplet name="Simkai" style="normal" weight="normal"/>
<font-triplet name="SimkaiMT" style="normal" weight="normal"/>
</font>
<font metrics-file="simhei.xml文件放置的绝对路径" kerning="yes" embed-file="simhei.ttf文件放置的绝对路径">
<font-triplet name="Simhei" style="normal" weight="normal"/>
<font-triplet name="SimheiMT" style="normal" weight="normal"/>
</font>
<font metrics-file="simfang.xml文件放置的绝对路径" kerning="yes" embed-file="simfang.ttf文件放置的绝对路径">
<font-triplet name="Simfang" style="normal" weight="normal"/>
<font-triplet name="SimfangMT" style="normal" weight="normal"/>
</font>
</fonts>
3.对extremetable.properties进行编辑,增加下面两行
exportPdf.userconfigLocation=/conf/userconfig.xml
exportPdf.font=Simfang

[b]异常总结:[/b]
1.如果点击pdf图标导出没有反应,可能是由于web.xml没有正确配置eXtremeExport过滤器
2.如果提示java.lang.NoClassDefFoundError问题,可能是步骤一1中驱动包导入不完整
3.[ERROR] Failed to read a font metrics file: Invalid font metrics file: simfang.xml (no protocol: arialuni.xml)
[ERROR] unknown font simfang,normal,normal so defaulted font to any
[ERROR] unknown font simfang,normal,normal so defaulted font to any
[color=red] 说明userconfig.xml文件正确加载,但是步骤三2中simfang.xml路径配置不正确,应该是绝对路径[/color]
4.测试反馈
simhei(黑体)
Error for /wap1/listUserInfo.do
java.lang.OutOfMemoryError: Java heap space
simkai(楷体)
[ERROR] Failed to read font metrics file file:/E:/simkai.xml: Character reference "&#0" is an invalid XML character.
java.lang.NullPointerException
[color=red]经过测试发现只有simfang仿宋可以使用[/color]
5.导出时列属性设置:
<@ec.row>
<@ec.column property="属性1" />
<@ec.column property="属性2" />
</@ec.row>
如果属性1和属性2相同,就会抛出下面的异常:
org.apache.fop.apps.FOPException: null:3:697 A table row must be child of fo:table-body, fo:table-header or fo:table-footer, not fo:table-row
at org.apache.fop.fo.flow.TableRow.<init>(TableRow.java:184)
at org.apache.fop.fo.flow.TableRow$Maker.make(TableRow.java:69)
at org.apache.fop.fo.FOTreeBuilder.startElement(FOTreeBuilder.java:352)
...
[color=red]解决方法:property中属性名称不能存在相同的值[/color]
其他属性:如果某列不需要导出为pdf,xls,可以设置该列<@ec.column property="属性3" viewsDenied="pdf,xls" />
如果某列需要导出:viewsAllowed="pdf,xls",默认是支持全部列导出.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值