温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Birt支持自定义导出中文名称

发布时间:2020-06-23 12:20:22 来源:网络 阅读:642 作者:genuinecx 栏目:软件技术

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

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

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

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

  1. 自定义实现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");
    }
  1. 配置Birt的导出文件生成类

修改web.xml

<context-param>
        <param-name>BIRT_FILENAME_GENERATOR_CLASS</param-name>
        <param-value>org.eclipse.birt.report.utility.filename.CustomExportGenerator</param-value>
    </context-param>
  1. 支持中文

文件名称: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 )
                        + "\"" ); 
  1. 修改Tomcat的编码

&lt;Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/&gt;

  1. 访问方式:
    frameset?report=test.rptdesign&format=docx&__filename=测试
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI