2013-04-04 83 views
0

我试图以excel(xls)格式导出报告,并在打开/保存对话框帮助下从浏览器中下载文件。JasperReports:将报告导出到Excel时文件名不正确

当文件下载框弹出时,文件名不能正确显示。该文件名来作为URL

下面是我的代码:

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReportMCQ, params, datasource); 

JRXlsExporter jasperXlsExportMgr = new JRXlsExporter(); 

ByteArrayOutputStream xlsReport = new ByteArrayOutputStream(); 
jasperXlsExportMgr.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 
jasperXlsExportMgr.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE); 
jasperXlsExportMgr.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, java.lang.Boolean.FALSE); 
jasperXlsExportMgr.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, java.lang.Boolean.FALSE); 
jasperXlsExportMgr.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, java.lang.Boolean.TRUE); 
jasperXlsExportMgr.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_COLUMNS, java.lang.Boolean.TRUE); 
jasperXlsExportMgr.setParameter(JRXlsExporterParameter.IS_COLLAPSE_ROW_SPAN, java.lang.Boolean.TRUE); 
jasperXlsExportMgr.setParameter(JRXlsExporterParameter.IS_IGNORE_CELL_BORDER, java.lang.Boolean.FALSE); 
jasperXlsExportMgr.setParameter(JRXlsExporterParameter.CREATE_CUSTOM_PALETTE, java.lang.Boolean.TRUE); 
jasperXlsExportMgr.setParameter(JRExporterParameter.OUTPUT_STREAM, xlsReport); 
jasperXlsExportMgr.exportReport(); 
bytes = xlsReport.toByteArray(); 
getResponse().setHeader("Content-disposition", "attachment; filename=\"report.xls\""); 
getResponse().setContentType("application/vnd.ms-excel"); 
getResponse().setContentLength(bytes.length); 
if (bytes.length > 0) { 
    servletOutputStream.write(bytes, 0, bytes.length); 
    servletOutputStream.flush(); 
    servletOutputStream.close(); 
} 
+0

可能重复[?我怎样才能改变一个JasperReport的实际名称](http://stackoverflow.com/questions/6738253/how-can-i-change-a -jasperreports-actual-name)&[JasperReports PdfServlet以PDF格式保存报告 - 我如何设置浏览器的文件名以提示用户?](http://stackoverflow.com/q/12095833/876298) – 2013-04-04 07:33:31

回答

1

试试这个参数:

jasperXlsExportMgr.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, “MyFile的”);

从碧玉文件:

静态JRExporterParameter输出文件名:导出报表的文件名。

0

试试这个代码:

String dir = "C:/myproject/"; 
Connection kns = BukaKoneksi(url); 
HashMap hm = new HashMap(); 
String name = dir+"file/_.xls""; 
String nfl = dir+"file/__.xls"; 
String fjas = "a.jasper"; 
String nname = "a.xls"; 

//jasper 
JasperPrint print = JasperFillManager.fillReport(dir+"jasper/"+fjas, hm, kns); 
JRXlsExporter exporter = new JRXlsExporter(); 
ByteArrayOutputStream xlsReport = new ByteArrayOutputStream(); 
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print); 
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, xlsReport); 
exporter.setParameter(JRExporterParameter.OUTPUT_FILE, fname); 
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, nfl); 
exporter.exportReport();  

//download file 
byte bytes[] = xlsReport.toByteArray(); 
response.setContentType("application/vnd.ms-excel"); 
response.setHeader("Content-Disposition", "attachment; filename="+nname); 
response.setContentLength(bytes.length); 
xlsReport.close(); 
OutputStream ouputStream = response.getOutputStream(); 
ouputStream.write(bytes, 0, bytes.length); 
ouputStream.flush(); 
ouputStream.close();