转自:http://www.blogjava.net/vjame/archive/2013/10/12/404908.html
。
2.业务处理
1 //返回报表查询结果
List<ReportElectronicAccountMapping> list=bndStoreImportService.queryElectronicAccount(bndReportParam); 2 if(list.size()>0){
//生成JasperPrint对象 3 JasperPrint jp=JasperReportUtil.getPrint(JsonMapper.toJsonString(list), bndReportParam, request); 4 //返回分页信息 5 response.setHeader("maxPages", jp.getPages().size()+""); 6 response.setHeader("pageNo", request.getParameter("pageNo"));
//导出报表 7 JasperReportUtil.getExporter(bndReportParam, request, response, jp).exportReport(); 8 }else{ 9 response.setHeader("error",JasperReportUtil.stringToUnicode("没有查询到电子账册相关数据!")); 10 }
3.
1 String reportName=bndReportParam.getReportName(); 2 //文件路径 3 String jasperModelpath = request.getSession().getServletContext().getRealPath("/WEB-INF/views/modules/bus/pcd/bonded/report/")+File.separator; 4 // String pp=Global.getProjectPath(); 5 //读取项目下此路径的报表样式文件 6 File reportFile = new File(jasperModelpath+reportName+".jasper"); 7 //编译报表,读取jasperreport文件 生成JasperReport对象 8 JasperReport jasperReport = (JasperReport) JRLoader.loadObjectFromFile(reportFile.getPath()); 9 10 //文件路径,这里单独保存一份,供有子表功能的报表提供路径。 11 bndReportParam.setSubUrl(jasperModelpath); 12 13 Map<String, Object> parameters = Maps.newHashMap(); 14 parameters.put(JsonQueryExecuterFactory.JSON_LOCALE, Locale.ENGLISH); 15 parameters.put(JRParameter.REPORT_LOCALE, Locale.US); 16 17 //各种报表样式处理结果 18 if (reportName.equals("ReportAccount")) { 19 jasperPrint=reportAccount(bndReportParam, parameters, jasperReport, json); 20 }else if(reportName.equals("ReportWarning")){ 21 jasperPrint=reportWarning(bndReportParam, parameters, jasperReport, json); 22 }else if(reportName.equals("ReportDisposeStatistics")){ 23 jasperPrint=reportDisposeStatistics(bndReportParam, parameters, jasperReport, json); 24 }else if(reportName.equals("ReportLoss")){ 25 jasperPrint=reportLoss(bndReportParam, parameters, jasperReport, json); 26 }else if(reportName.equals("ReportFree")){ 27 jasperPrint=reportFree(bndReportParam, parameters, jasperReport, json); 28 }else if(reportName.equals("ReportDispose")){ 29 jasperPrint=reportDispose(bndReportParam, parameters, jasperReport, json); 30 }else if(reportName.equals("ReportCompare")){ 31 jasperPrint=reportCompare(bndReportParam, parameters, jasperReport, json); 32 }else if(reportName.equals("ReportRepair")){ 33 jasperPrint=reportRepair(bndReportParam, parameters, jasperReport, json); 34 } 35 return jasperPrint;
4.完善报表信息,填充数据
1 //判断保税仓库还是自贸区仓库 2 String storage=""; 3 if(bndReportParam.getBndStore()==null){ 4 storage=bndReportParam.getFtaStore().getName(); 5 }else{ 6 storage=bndReportParam.getBndStore().getName(); 7 } 8 parameters.put("storage", storage); 9 parameters.put("goodsType", bndReportParam.getBasCargoJt().getName()); 10 parameters.put("title", "电子账册"); 11 parameters.put("queryDate", DateUtils.formatDate(bndReportParam.getBeginDate(), "yyyy-MM-dd") 12 +"至"+DateUtils.formatDate(bndReportParam.getEndDate(), "yyyy-MM-dd")); 13 InputStream is = null; 14 is = new ByteArrayInputStream(json.getBytes("utf-8")); 15 parameters.put("JSON_INPUT_STREAM", is); 16 return JasperFillManager.fillReport(jasperReport, parameters);
5.导出报表
1 List<ReportElectronicAccountMapping> list=bndStoreImportService.queryElectronicAccount(bndReportParam); 2 if(list.size()>0){ 3 JasperPrint jp=JasperReportUtil.getPrint(JsonMapper.toJsonString(list), bndReportParam, request); 4 //返回分页信息 5 response.setHeader("maxPages", jp.getPages().size()+""); 6 response.setHeader("pageNo", request.getParameter("pageNo")); 7 JasperReportUtil.getExporter(bndReportParam, request, response, jp).exportReport(); 8 }else{ 9 response.setHeader("error",JasperReportUtil.stringToUnicode("没有查询到电子账册相关数据!")); 10 }
6.
1 @SuppressWarnings("rawtypes") 2 public static JRAbstractExporter getExporter(BndReportParam bndReportParam, HttpServletRequest request, HttpServletResponse response, JasperPrint jasperPrint) throws Exception{ 3 JRAbstractExporter exporter=null; 4 if(bndReportParam.isPdf()){ 5 //PDF 6 exporter=showPDF(request, response, jasperPrint); 7 }else if(bndReportParam.isExcel()){ 8 //Excel 9 exporter=showExcel(request, response, jasperPrint); 10 }else if(bndReportParam.isPrint()){ 11 //打印 12 exporter=print(request, response, jasperPrint); 13 }else{ 14 //页面展示 15 exporter=showHTML(request, response, jasperPrint); 16 } 17 return exporter; 18 }
7.showPDF
1 public static JRPdfExporter showPDF(HttpServletRequest request, HttpServletResponse response, JasperPrint jasperPrint) throws IOException{ 2 OutputStream outputStream = response.getOutputStream(); 3 4 response.setContentType("application/pdf"); 5 6 JRPdfExporter exporter = new JRPdfExporter(); 7 8 exporter.setExporterInput(new SimpleExporterInput( 9 jasperPrint)); 10 exporter.setExporterOutput(new SimpleOutputStreamExporterOutput( 11 outputStream)); 12 return exporter; 13 }
8.
1 public static JRXlsAbstractExporter<XlsxReportConfiguration, XlsxExporterConfiguration, JRXlsxExporterContext> showExcel(HttpServletRequest request, HttpServletResponse response, JasperPrint jasperPrint) throws IOException{ 2 OutputStream outputStream = response.getOutputStream(); 3 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 4 response.setHeader("Content-Disposition", 5 "inline; filename=\"file.xlsx\""); 6 7 JRXlsAbstractExporter<XlsxReportConfiguration, XlsxExporterConfiguration, JRXlsxExporterContext> exporter = new JRXlsxExporter(); 8 9 exporter.setExporterInput(new SimpleExporterInput( 10 jasperPrint)); 11 exporter.setExporterOutput(new SimpleOutputStreamExporterOutput( 12 outputStream)); 13 14 SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration(); 15 configuration.setOnePagePerSheet(false); 16 configuration.setWhitePageBackground(false); 17 configuration.setShowGridLines(false); 18 exporter.setConfiguration(configuration); 19 20 return exporter; 21 }
9.
1 public static HtmlExporter print(HttpServletRequest request, HttpServletResponse response, JasperPrint jasperPrint) throws IOException{ 2 OutputStream outputStream = response.getOutputStream(); 3 HtmlExporter exporter = new HtmlExporter(); 4 SimpleHtmlExporterOutput output = new SimpleHtmlExporterOutput(outputStream); 5 6 request.getSession() 7 .setAttribute( 8 ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, 9 jasperPrint); 10 WebHtmlResourceHandler webHtmlResourceHandler = new WebHtmlResourceHandler( 11 "image?time=" + new Date().getTime() + "&image={0}"); 12 output.setImageHandler(webHtmlResourceHandler); 13 14 exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); 15 exporter.setExporterOutput(output); 16 //报表打印 17 response.getOutputStream().print("<script src=\""+request.getContextPath()+"/static/print/print.js\" type=\"text/javascript\"></script><link href=\""+request.getContextPath()+"/static/print/print.css\" type=\"text/css\" rel=\"stylesheet\">"); 18 return exporter; 19 } 20
10.showHTML
1 public static HtmlExporter showHTML(HttpServletRequest request, HttpServletResponse response, JasperPrint jasperPrint) throws IOException{ 2 OutputStream outputStream = response.getOutputStream(); 3 HtmlExporter exporter = new HtmlExporter(); 4 SimpleHtmlExporterOutput output = new SimpleHtmlExporterOutput(outputStream); 5 6 request.getSession() 7 .setAttribute( 8 ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, 9 jasperPrint); 10 WebHtmlResourceHandler webHtmlResourceHandler = new WebHtmlResourceHandler( 11 "image?time=" + new Date().getTime() + "&image={0}"); 12 output.setImageHandler(webHtmlResourceHandler); 13 14 exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); 15 exporter.setExporterOutput(output); 16 17 // configuration 18 SimpleHtmlReportConfiguration configuration = new SimpleHtmlReportConfiguration(); 19 //设置当前页数 20 configuration.setPageIndex(Integer.parseInt(request.getParameter("pageNo"))-1); 21 22 exporter.setConfiguration(configuration); 23 24 return exporter;