Java导出birt报表_Birt支持自定义导出中文名称

本文介绍了如何在BIRT报表系统中解决导出文件时无法自定义中文名称的问题。通过实现IFilenameGenerator接口并配置web.xml,可以支持在Java中导出报表时设置动态的中文文件名。同时,针对Tomcat编码的调整确保了中文文件名的正确显示。
摘要由CSDN通过智能技术生成

BIRT 是以 Java 和 JavaEE 为基础为 Web 应用程序开发的基于 Eclipse 的开源报表系统,虽然支持文件导出功能,但不支持导出时动态自定义文件名称,尤其不支持中文。

Birt默认提供了两种导出文件时自定义名称的方法,如下:

DefaultFilenameGenerator:报表文件名称.后缀名

TimestampFilenameGenerator:报表文件名称+yyyyMMdd-HHmmss.后缀名

Birt若实现自定义导出文件名称,需要实现org.eclipse.birt.report.utility.filename包下的IFilenameGenerator接口,具体操作如下:

自定义实现IFilenameGenerator 接口

public class CustomExportGenerator implements IFilenameGenerator {

@Override

public String getFilename( String baseName, String fileExtension, String outputType, Map options) {

return baseName + "." + fileExtension;

}

}

从上面的代码看出,IFilenameGenerator 中的方法默认没有提供自定义文件名称,这时候只能够从Map options参数中获取,当然如果不嫌麻烦的话,也可以重写getFilename接口。

Object obj = options.get("httpRequest");

if(obj !=null && obj instanceof RequestFacade){

RequestFacade request = (RequestFacade)obj;

exportName = ParameterAccessor.getParameter(request,"__filename");

}

配置Birt的导出文件生成类

修改web.xml

BIRT_FILENAME_GENERATOR_CLASS

org.eclipse.birt.report.utility.filename.CustomExportGenerator

支持中文

文件名称:org.eclipse.birt.report.presentation.aggregation.layout.FramesetFragment

方法: doPreService( HttpServletRequest request, HttpServletResponse response )

操作:

String filename = ParameterAccessor.getExportFilename( new BirtContext( request, response ), format, emitterId );

String displayName = URLEncoder.encode(filename,"utf-8");

displayName = displayName .replace("+","%20");

response.setCharacterEncoding("utf-8");

response.setHeader("contentType", "text/html; charset=utf-8");

response.setHeader( "Content-Disposition", //$NON-NLS-1$

ParameterAccessor.htmlEncode( openType )

+ "; filename=\""

+ ParameterAccessor.htmlEncode(displayName )

+ "\"" );

修改Tomcat的编码

<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

访问方式:

frameset?report=test.rptdesign&format=docx&__filename=测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值