Birt自定义中文文件名
最近有需求是导出时就将名称设置好,用户不想再去编辑一次,嫌麻烦!!!然后就有了篇文字。。。
通过查看其它资料发现,是要进行重写getFilename方法,通过DEBUG找到了实现的一个大致路线。
在浏览器中检查元素会发现,有元素包裹了一些信息(具体头内容信息查看:https://blog.csdn.net/weixin_43453386/article/details/83792682),其中有一个为filename,这个就是我们要处理的参数。
在我使用的Birt4.6.0版本中,通过DEBUG了解了大致调用路线。有个类名为EngineFragment的类,在EngineFragment的doPreService方法中设置filename。
在工具类ParameterAccessor中:
IFilenameGenerator这个类在ParameterAccessor中的initParameters方法进行了初始化:
先通过getInitParameter方法获取web.xml中获得BIRT_FILENAME_GENERATOR_CLASS属性,判断xml中是否有配置然后对
exportFilenameGenerator实例化。
大致调用路线知道了,就开始修改。
birt 修改导出的文件名实现方法:
一、在web.xml中追加配置的 BIRT_FILENAME_GENERATOR_CLASS
<context-param>
<param-name>BIRT_FILENAME_GENERATOR_CLASS</param-name>
<param-value>
prd.birt.report.filename.TimestampFilenameGenerator
</param-value>
</context-param>
二、实现IFilenameGenerator 接口
public class CustomExportGenerator implements IFilenameGenerator {
@Override
public String getFilename( String baseName, String fileExtension, String outputType, Map options) {
String exportName = null;
Object obj = options.get(IFilenameGenerator.OPTIONS_HTTP_REQUEST);
if(obj !=null && obj instanceof RequestFacade){
RequestFacade request = (RequestFacade)obj;
// preview?&__report=Test.rptdesign&__filename=测试
//__filename可以自己定义不强求为这个名称,与路径名称一致即可
exportName = ParameterAccessor.getParameter(request,"__filename");
}
return exportName + "." + fileExtension;
}
}
getParameter为工具类ParameterAccessor中提供的方法
因为我们要的是中文文件名称,所以再修改下:
exportName = java.net.URLEncoder.encode(exportName, "UTF-8");//return前添加这行就可以了
return exportName + "." + fileExtension;
这样导出或下载文件就为自定义名称了。
上一篇: PHP类和对象相关系统函数与运算符小结
下一篇: 网络编程基础及代码实现
推荐阅读
-
Birt自定义中文文件名
-
MySQL中文汉字转拼音的自定义函数和使用实例(首字的首字母)
-
MySQL中文汉字转拼音的自定义函数和使用实例(首字的首字母)
-
zip压缩解决文件名中文乱码问题(2) 博客分类: JavaJava Web zipzip压缩压缩zipapache中文文件名乱码
-
elasticsearch中文分词器插件elasticsearch-analysis-ik远程自定义词典热更新
-
web文件下载,路径或文件名中文乱码 博客分类: webjava
-
web文件下载,路径或文件名中文乱码 博客分类: webjava
-
在amr转mp3时,如何自定义文件名?
-
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
-
关于图片下传,文件名中文显示乱码有关问题