Birt4.3.0导出报表中文名称

首先是要搞到viewservert的源码。然后定义自己的文件名称生成类JpmsFilenameGenerator,我是这样写的。

package com.kong.report.web.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequestWrapper;

import org.eclipse.birt.report.utility.filename.IFilenameGenerator;

/**
 * @author kong
 * @create 2017年9月26日下午5:30:06
 */
public class JpmsFilenameGenerator implements IFilenameGenerator {
	
	public static final String DEFAULT_FILENAME = "BIRTReport"; //$NON-NLS-1$

	public JpmsFilenameGenerator(){}
	
	/**
	* @see org.eclipse.birt.report.utility.filename.IFilenameGenerator#getExportFilename(String,String,Map)
	*/
	@SuppressWarnings("rawtypes")
	@Override
	public String getFilename(String baseName, String extension, String outputType, Map options) {
		String exportName = _getExportName(options);
		if(exportName !=null && !"null".equalsIgnoreCase(exportName)){
			baseName = exportName;
		}
		return makeFileName(baseName, extension);
	}

	@SuppressWarnings("rawtypes")
	private String _getExportName(Map options) {
		String exportName=null;
		Object obj = options.get("httpRequest");
		if(obj !=null){
			HttpServletRequestWrapper request = (HttpServletRequestWrapper)obj;
			String time = request.getParameter("time");//报表时间
			String reportName = request.getParameter("fileName"); //日报名称
			exportName = time + "_" + reportName + "_导出时间";
		}
		return exportName;
	}

	/**
	* Makes a filename using the target extension from the options.
	* @param fileName file name which extension must be replaced
	* @return file name with replaced extension
	*/
	public static String makeFileName( String fileName, String extensionName ) {
		String baseName = fileName;
		if (baseName == null || baseName.trim().length() <= 0) {
			baseName = DEFAULT_FILENAME;
		}
		baseName +="_" + new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss").format(new Date());//报表导出时间
		// append extension name
		if (extensionName != null && extensionName.length() > 0) {
			baseName += "." + extensionName; //$NON-NLS-1$
		}
		return baseName;
	}
}

网上‘_getExportName’方法的其它写法。

private String _getExportName(Map options) {
    String exportName=null;
    Object obj = options.get("httpRequest");
    if(obj !=null && obj instanceof RequestFacade){
        RequestFacade request = (RequestFacade)obj;
        exportName = ParameterAccessor.getParameter(request,"__exportName");
    }
    return exportName;
}
  • 然后在web.xml里添加下面的配置:

    <context-param>
        <param-name>BIRT_FILENAME_GENERATOR_CLASS</param-name>
        <param-value>com.jiguang.report.utility.filename.JpmsFilenameGenerator</param-value>
    </context-param>
  • 最后修改一下FramesetFragment这个类的doPreService方法,有一段设置文件编码的
String filename = ParameterAccessor.getExportFilename(new BirtContext(request, response), format, emitterId);
response.setHeader("Content-Disposition", openType + "; filename=\"" + filename + "\""); 

更改为

String filename = ParameterAccessor.getExportFilename( new BirtContext( request, response ), format, emitterId );
String filedisplay = URLEncoder.encode(filename,"utf-8");
filedisplay = filedisplay.replace("+","%20");//将+替换成空格; 
response.setHeader( "Content-Disposition", //$NON-NLS-1$
	ParameterAccessor.htmlEncode( openType )
	+ "; filename=\"" //$NON-NLS-1$
	+ ParameterAccessor.htmlEncode( filedisplay )
	+ "\"" );

小插曲~
Tomcat中URIEncoding要设置好,要不然就中文乱码。

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

ok,调用的时候通过在调用报表的url上拼接参数    fileName="这是中文报表"就Ok了。

var fileName = '这是中文报表';
var basePath = '<%=basePath%>';
var birtUrl = 'frameset?__report=gate_day_report.rptdesign&__showtitle=false&__toolbar=false&__navigationbar=false&__parameterpage=false';
var jsonUrl = '${param.jsonUrl}'+'gate/day/generateBirt&gateId='+gateId+'&time='+time+'&fileName='+fileName;
var print = '__format='+printType+'&__pageoverflow=0&__asattachment=true&__overwrite=false';
window.location.href = birtUrl + "&JSONURL=" + jsonUrl + "&" + print;

然后就打印出中文文件名文档了。

修改源码后的jar包可以跳转到下面地址下载

https://download.csdn.net/download/wzg921/10405196




推荐个小软件:class文件可以用jd-gui查看,但是没法更改。



如有错误之处,望指正。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值