BIRT 是以 Java 和 JavaEE 为基础为 Web 应用程序开发的基于 Eclipse 的开源报表系统,虽然支持文件导出功能,但不支持导出时动态自定义文件名称,尤其不支持中文。
创新互联主营钦北网站建设的网络公司,主营网站建设方案,重庆APP软件开发,钦北h5微信小程序开发搭建,钦北网站营销推广欢迎钦北等地区企业咨询Birt默认提供了两种导出文件时自定义名称的方法,如下:
Birt若实现自定义导出文件名称,需要实现org.eclipse.birt.report.utility.filename包下的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");
}
修改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 )
+ "\"" );
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。