,然后在跳转到jreport的这个controller里,代码如下:/**
   * 打印查询业务报表方法
   */
  @RequestMapping(params = "method=printReport")
  public String printReport(HttpServletRequest request, ModelMap model,
  HttpServletResponse response){
  //bangjiantongji.jasper//4.5版本的打印模板
  //bangjiantongji1.jasper//老版本的打印模板
  String reportFilePath = "/report/reportFiles/bangjiantongji.jasper";
  Map parameters = new HashMap();
 
  //获取用户信息  
  OperatorDetails loginUser = SpringSecurityUtils.getCurrentUser();
 
  String userDept = loginUser.getUser().getDeptCodeTree(); //当前登录用户编号
 
  String today = request.getParameter("today");//判断是否是从个人工作台进来的标识
  Page<CaseBaseInfoFlow> pages = new Page<CaseBaseInfoFlow>(10);
  String caseNo = request.getParameter("caseNo"); //办件编号
  String caseApplicant = request.getParameter("caseApplicant");//申报人
  String caseType = request.getParameter("caseType");//办件类型
  String caseStartDateBegin = request.getParameter("caseStartDateBegin");//受理时间Begin
  String caseStartDateEnd = request.getParameter("caseStartDateEnd");//受理时间End
  String surplusDays = request.getParameter("surplusDays")==null?"-1":request.getParameter("surplusDays");//剩余天数
  String caseEndDateBegin = request.getParameter("caseEndDateBegin");//受理时间Begin
  String caseEndDateEnd = request.getParameter("caseEndDateEnd");//受理时间End
  String caseStatus = request.getParameter("caseStatus")==null?"":request.getParameter("caseStatus");//办件状态
  String code = request.getParameter("code")==null?"":request.getParameter("code"); //服务事项Code
         String chType=request.getParameter("chtype");  //选择类型(dist:中心;dept:部门;user:事项)
         
  CaseBaseInfoFlow caseFlow = new CaseBaseInfoFlow();
  caseFlow.setCaseNo(caseNo);
  caseFlow.setCaseApplicant(caseApplicant);
  caseFlow.setCaseType(caseType);
  caseFlow.setCaseStartDateBegin(caseStartDateBegin);
  caseFlow.setCaseStartDateEnd(caseStartDateEnd);
  caseFlow.setCaseEndDateBegin(caseEndDateBegin);
  caseFlow.setCaseEndDateEnd(caseEndDateEnd);
  //caseFlow.setServCode(servCode);
  if(surplusDays=="-1"){
  caseFlow.setSurplusDay(Integer.valueOf(-1));
  }else{
  caseFlow.setSurplusDay(Integer.valueOf(surplusDays));
  }
  if(caseStatus!=""){
  caseFlow.setCaseStatus(caseStatus);
  }
  User user = loginUser.getUser();
  StringBuffer sql = new StringBuffer(); 
  sql.append("select row_number() over (order by c.id ) as xuhao, isNull(c.caseNo,'') caseNo,isNull(c.servName,'') servName,isNull(c.flowInstanceId,-1) flowInstanceId,c.servCode,c.servWarnDay,");
  sql.append(" isNull(c.caseType,'') caseType,isNull(c.caseStatus,'') caseStatus,isNull(c.caseApplicant,'') caseApplicant,isNull(c.deptName,'') deptName,");
  sql.append(" isNull(c.receiverName,'') receiverName,isNull(c.receiverName,'') processUser,");
  sql.append(" isNull(convert(varchar(10),c.caseStartDate,120),'') caseStartDate,");
  sql.append(" isNull(convert(varchar(10),c.casePromiseDate,120),'') casePromiseDate");
  sql.append(" from t_sp_caseBaseInfo c  where  1=1 ");
 
  if(StringUtils.isNotBlank(userDept)){//当前登录人的查询权限(可以查询那些部门信息)
  String[] userDepts = userDept.split(",");
  String userDeptes = "";
  for (int i =0;i<userDepts.length;i++) {
  userDeptes += "'"+userDepts[i]+"',";
  }
  sql.append(" and c.deptCode in(" + userDeptes.substring(0, userDeptes.length()-1)  + ")");
  }
  if(today!=null){
  if("accept".equals(today)){
  sql.append(" and DateDiff(day,c.casestartdate,getdate())=0 and c.deptCode ='"+user.getDeptCode()+"' and c.acceptPeople='"+user.getUserName()+"' and c.caseFrom in('窗口受理','网上申报') ");
  }
  if("finish".equals(today)){
  sql.append(" and c.caseStatus in('许可','不予许可','退件','补正不来','已发证') and DateDiff(day,c.caseEndDate,getdate())=0 and c.deptCode = '"+user.getDeptCode()+"'");
  }
  }
  if(StringUtils.isNotBlank(caseFlow.getCaseStatus())){ //办件状态
  sql.append(" and c.caseStatus = '" + caseFlow.getCaseStatus() + "'");
  }
  if(StringUtils.isNotBlank(caseFlow.getCaseNo())){ //办件编号
  sql.append(" and c.caseNo like '%" + caseFlow.getCaseNo() + "%'");
  }
  if(StringUtils.isNotBlank(caseFlow.getCaseApplicant())){ //申报人
  sql.append(" and c.caseApplicant like '%" + caseFlow.getCaseApplicant() + "%' ");
  }
  if(StringUtils.isNotBlank(caseFlow.getCaseStartDateBegin()) && StringUtils.isNotBlank(caseFlow.getCaseStartDateEnd())){ //受理时间
  sql.append(" and convert(varchar(10),c.caseStartDate,120) >= convert(varchar(10),'" + caseFlow.getCaseStartDateBegin() + "',120) ");
  sql.append(" and convert(varchar(10),c.caseStartDate,120) <= convert(varchar(10),'" + caseFlow.getCaseStartDateEnd() + "',120) ");
  }
  if(StringUtils.isNotBlank(caseFlow.getCaseEndDateBegin()) && StringUtils.isNotBlank(caseFlow.getCaseEndDateEnd())){ //办结时间
  sql.append(" and convert(varchar(10),c.caseEndDate,120) >= convert(varchar(10),'" + caseFlow.getCaseEndDateBegin() + "',120) ");
  sql.append(" and convert(varchar(10),c.caseEndDate,120) <= convert(varchar(10),'" + caseFlow.getCaseEndDateEnd() + "',120) ");
  }
  if(caseFlow.getSurplusDay()!=-1){
  if(StringUtils.isNotBlank(String.valueOf(caseFlow.getSurplusDay()))){ //剩余天数
  sql.append(" and c.surplusDay = " + caseFlow.getSurplusDay() + "");
  }
  }
  if(StringUtils.isNotBlank(caseFlow.getCaseType())){//办件类型
  sql.append(" and c.caseType = '" + caseFlow.getCaseType() + "'");
  }
  if(StringUtils.isNotBlank(code)){//服务事项Code
  this.spliceAuth(sql, chType, code);
  //sql.append(" and w.servCode = '" + caseFlow.getServCode() + "'");
  }
  List flowList = jdbcTemplate.queryForList(sql.toString());
         parameters.put("zs", flowList.size());
         parameters.put("strSql", sql.toString());
  try {
         System.out.println("=============老方法调用=============");
  publicMethodOld( model,request, response, parameters);
  } catch (Exception e) {
  e.printStackTrace();
  }
 // try {
 // System.out.println("===========新方法调用===========");
 // JasperReportUtil.reportHTML(request, response, reportFilePath,
 // parameters, flowList);
 // } catch (Exception e) {
 // e.printStackTrace();
 // }
  return null;
  }@RequestMapping(params = "method=publicMethodOld")
  public void publicMethodOld(ModelMap model,HttpServletRequest request, HttpServletResponse response,Map parameters)
  {
  try{
  ServletContext context = request.getSession().getServletContext();
  String reportFilePath = request.getParameter("reportFile");
  System.out.println("reportFilePath==="+reportFilePath);
 // String reportFilePath = request.getParameter("reportFile");
  File reportFile = new File(context.getRealPath(reportFilePath));
  JasperPrint jasperPrint = null;
  Connection conn = dataSource.getConnection();
  System.out.println("reportFile.getPath==="+reportFile.getPath());
  try {
 // JasperReport jasperReport = (JasperReport)JRLoader.loadObject(new File(reportFile.getPath()));
  InputStream inputStream = new FileInputStream(new File(reportFile.getPath()));
 // jasperPrint = JasperFillManager.fillReport(jasperReport,parameters, conn);
  jasperPrint = JasperFillManager.fillReport(inputStream, parameters, conn);
 
  // 将这个报表结果存入session中给后来的导出报表使用。
  request.getSession().setAttribute("jasperReport", jasperPrint);
 
  } catch (Exception e) {
  e.printStackTrace();
  response.setContentType("text/html");
  PrintWriter out = response.getWriter();
  out.println("<html>");
  out.println("<head>");
  out
  .println("<title>JasperReports - Web Application Sample</title>");
  out
  .println("<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">");
  out.println("</head>");
 
  out.println("<body bgcolor=\"white\">");
 
  out
  .println("<span class=\"bnew\">JasperReports encountered this error :</span>");
  out.println("<pre>");
 
  e.printStackTrace(out);
  e.printStackTrace();
 
  out.println("</pre>");
 
  out.println("</body>");
  out.println("</html>");
  } finally {
  try {
  if (conn != null) {
  conn.close();
  }
  } catch (Exception e) {
  e.printStackTrace();
  }
  }
 
  if (jasperPrint != null) {
  response.setContentType("application/octet-stream");
  ServletOutputStream ouputStream = response.getOutputStream();
 
  ObjectOutputStream oos = new ObjectOutputStream(ouputStream);
  oos.writeObject(jasperPrint);
  oos.flush();
  oos.close();
 
  ouputStream.flush();
  ouputStream.close();
  } else {
  response.setContentType("text/html");
  PrintWriter out = response.getWriter();
  out.println("<html>");
  out.println("<head>");
  out
  .println("<title>JasperReports - Web Application Sample</title>");
  out
  .println("<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">");
  out.println("</head>");
 
  out.println("<body bgcolor=\"white\">");
 
  out.println("<span class=\"bold\">Empty response.</span>");
 
  out.println("</body>");
  out.println("</html>");
  }
  }catch(Exception ee){
  ee.printStackTrace();
  }
  }

解决方案 »

  1.   

    但是打印的时候,老是报错,报错信息如下:
    Java Plug-in 1.6.0_23
    使用 JRE 版本 1.6.0_23-b05 Java HotSpot(TM) Client VM
    用户主目录 = C:\Documents and Settings\Administrator
    ----------------------------------------------------
    c:   清除控制台窗口
    f:   终结在结束队列上的对象
    g:   垃圾收集
    h:   显示此帮助消息
    l:   转储类载入程序列表
    m:   打印内存使用
    o:   触发日志记录
    q:   隐藏控制台
    r:   重新载入策略配置
    s:   转储系统和部署属性
    t:   转储线程列表
    v:   转储线程堆栈
    x:   清除类载入程序高速缓存
    0-5: 设置跟踪级别为<n>
    ----------------------------------------------------
    Exception in thread "thread applet-EmbeddedViewerApplet.class-1" java.lang.ClassFormatError: Incompatible magic value 218762506 in class file net/sf/jasperreports/view/save/JRPdfSaveContributor
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at net.sf.jasperreports.engine.util.JRClassLoader.loadClassForRealName(JRClassLoader.java:157)
    at net.sf.jasperreports.engine.util.JRClassLoader.loadClassForName(JRClassLoader.java:115)
    at net.sf.jasperreports.view.JRViewer.initSaveContributors(JRViewer.java:456)
    at net.sf.jasperreports.view.JRViewer.<init>(JRViewer.java:302)
    at net.sf.jasperreports.view.JRViewer.<init>(JRViewer.java:241)
    at net.sf.jasperreports.view.JRViewer.<init>(JRViewer.java:220)
    at JRViewerSimple.<init>(JRViewerSimple.java:42)
    at EmbeddedViewerApplet.init(EmbeddedViewerApplet.java:69)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    网上查了,讲是编译的时候版本不兼容造成的...但是小弟真心不是熟悉这个,第一次接触...
    请各位大侠帮忙解决...不胜感激....
      

  2.   

    记得finereport有个flash打印功能挺好用的,楼主可以看看能不能在ireport上也实现