1. 程式人生 > >Birt4.3.0匯出報表中文名稱

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檢視,但是沒法更改。

如有錯誤之處,望指正。


相關推薦

Birt4.3.0匯出報表中文名稱

首先是要搞到viewservert的原始碼。然後定義自己的檔名稱生成類JpmsFilenameGenerator,我是這樣寫的。package com.kong.report.web.utils; import java.text.SimpleDateFormat; imp

Vue 3.0 Composition API - 中文翻譯

# Composition API **釋出轉載請附原文連結 https://www.cnblogs.com/zgh-blog/articles/composition_api.html** *這兩天初步瞭解了下 vue 3.0 相關的一些內容,對於 Composition API 的指導文件過了一遍

MVC 3.0錯誤 HTTP 404您正在查找的資源(或者它的一個依賴項)可能已被移除,或其名稱已更改,或暫時不可用。請檢查以下 URL 並確保其拼寫正確。

global 路由 eight out 行修改 routes 一個 是你 技術 http://www.cnblogs.com/blues_/p/3360533.html MVC3.0框架開發項目: 有時在程序運行的時候會出現“HTTP 404。您正在查找的資源(或者它的

Android Studio 3.0踩坑篇之自定義apk名稱

報錯日誌 Cannot set the value of read-only property ‘outputFile’ Android Studio3.0之前用法如下 applicationVariants.all { variant ->

Vue.js 3.0 PPT(附部分中文翻譯)

Evan You 剛剛釋出了最新的 Vue 3 和他在 Vue Toronto 的演講內容: Tweet PPT Vue 3.0 將會發生什麼? 更快 更小 更易維護 更易於原生 讓開發者更爽

PyTorch 0.3.0 中文文件釋出,一把梭系列 | ApacheCN

PyTorch 0.3.0 中文文件釋出,一把梭系列 | ApacheCNPyTorch(Facebook 開源)是一個針對 deep learning(深度學習), 並且使用 GPU 和 CPU 來優化的 tensor library(張量庫).文件連結翻譯吐槽PyTorch 中文文件的翻譯確實挺麻煩的,忒

Linux 檔案系統層級標準 Filesystem Hierarchy Standard (FHS)3.0 基本全章節中文翻譯

本文章所有內容不允許以任何形式進行轉載、複製、存檔或分發等,為了避免翻譯過程中對標準內容理解有誤、或語言組織不嚴謹等造成的不能100%表達或闡述原標準的思想和內容,從而誤導讀者或造成錯誤等,強烈要求讀者以原英文版為準,此文章只做為個人學習筆記。 歡迎讀者以留言等任何方式予以糾正錯誤。

Intel釋出容器作業系統Clear Containers 3.0版,開始支援Kubernetes_Kubernetes中文社群

在去年DockerCon中,Intel釋出了自己的容器作業系統Clear Container 2.0版,超過一年後的近日,Intel釋出新的3.0版,現在它也符合OCI標準,同時也支援Kubernetes。 Intel表示,這一次推出新版容器作業系統的架構上有相當大的轉移,其中的關鍵就是用於構

Cassandra 3.0 匯入匯出文字(cqlsh+copy)

官網資料: 資料檔案 可以是任意分隔符檔案,帶表頭不帶表頭均可,這裡帶表頭了 test.file: c1|c2|c3|value 1|1|1|a 2|2|2|a 建表 建立表空間 CREATE KEYSPACE myks WI

Android Studio 3.0輸入中文時輸入法不顯示問題

資源下載連線 最近外派客戶公司支援,然後新電腦安裝的as,發現輸入法輸入中文時不顯示選詞,很是頭疼,還以為是輸入法的問題,然後換了個遍都不行,最後百度了下,解決方法就是還上以前能顯示中文的as資料夾下的jre檔案就行了,重點是—換了之後記得重啟哦!`

解決struts2 下載中文名稱亂碼問題 適應不同三大主流瀏覽器 chrome28.0.1500.95、 firefox 23.0.1 、 IE11

 最近使用Sturts2作檔案下載時,發現在不同的瀏覽器上會有中文檔名亂碼的問題,現在把解決方法放在這裡,以便留個備份。 struts2配置檔案如下: Xml程式碼   <actionname="fileDownLoad"class="com.test

JMeter學習-031-JMeter 3.0 POST Body Data 中文亂碼問題

# 預設字型設定的配置項如下黑體標示所示 #JSyntaxTextArea configuration #jsyntaxtextarea.wrapstyleword=true #jsyntaxtextarea.linewrap=true #jsyntaxtextarea.codefolding=t

ID3v2 中文文件ver2.3.0

1. ID3標籤資訊(版本2.3.0) 1.1 文件說明 1.2 摘要 2. 約定 3. ID3v2概述 3.1 ID3v2 標籤頭(header) 3.2 ID3v2 擴充套件標籤頭(extended header) 3

Win7 64位中文旗艦版上Cocos2d-x 3.0的Android開發除錯環境架設

系統環境: Win764位中文旗艦版 各元件的版本: VS2012 Python2.7.6 x86 安裝步驟: 1.    預設安裝VS2012 2.    預設安裝Python 2.7.6,修改環境變數Path wmic ENVIRONMENT

Cocos2d-x 3.0 開發(七)在程式中處理cocoStudio匯出動畫

1、概述    使用cocoStudio可以方便的製作動畫,接下來的工作就是在我們的程式中使用製作的動畫。這篇中,我將使用程式將兩個動畫連線起來。有圖有真相:2、製作動畫    承接上一篇,我們再製作一

2018 Android 文字轉語音(中文) TextToSpeech+科大訊飛語音引擎3.0

最近專案中需要用到文字轉語音。 本來是想使用朗讀女生成的聲音檔案放到專案資源中進行播放。 但是產品要求改成動態的。於是就用了Google為我們封裝好的類TTS,即[TextToSpeech]:大家可以看下詳細文件。 程式碼其實不多,但是寫完之後測試就有問題

Redis 3.0中文官方文件翻譯計劃(17) ——叢集(中)

使用redis-rb-cluster寫一個示例應用    在後面介紹如何操作Redis叢集之前,像故障轉移或者重新分片這樣的事情,我們需要建立一個示例應用,或者至少要了解簡單的Redis叢集客戶端的互動語義。     我們採用執行一個示例,同時嘗試使節點失效,或者開始重新分

mysql 5.7.3.0-m13安裝教程

com 處理 技術分享 mysql 5.7 bench aid target 驗證 htm 安裝mysql百度經驗地址:(默認安裝,除了選擇不更新和選擇保存路徑,其它基本是下一步下一步) http://jingyan.baidu.com/article/7e4409

Package gtk+-3.0 was not found in the pkg-config search path

path 二進制 all 項目 有時 rpm fedora ack share 問題描述:   在fedora21系統上通過rpmbuild構建fcitx的二進制包時出現以上錯誤,經老程序員指點:“是相應的開發包沒有安裝” 解決辦法:   yum installl gtk3

Yasm 1.3.0 Release Notes

seh st3 require sys storage uil ble ear welcom Yasm 1.3.0 Release Notes http://yasm.tortall.net/releases/Release1.3.0.html Target Audie