2011-08-04 4 views
1

저는 Grails에서 프로젝트 작업을하고 있습니다. 나는 pdf, 엑셀 및 낱말에있는보고를 생성 할 필요가있다. 위에서 언급 한 형식으로 보고서를 생성 할 수있었습니다. 필자는 DynamicJasper를 사용하여 보고서를 생성했습니다.DynamicJasper의 하위 보고서 사용

이제 생성 된 보고서에 하위 보고서가 필요합니다.

생성 된 보고서는 파이 차트와 함께 다음 표를 포함, 지금은 더 1 이 같은 테이블에 아래와없는 것처럼 하위 보고서가 필요합니다

표를 더 1

SN | Top 20   |Reporting  |Comparison 
1 | Dorsopathies |$181   |$5  
2 | Special   |$23   |$6  
3 | Other Wounds |$20   |$0 

보고 기간

Members| M Cost   |P Cost  
    47 | $4,995,541  |$1,598,049  
234 | $2,576,497  |$824,209 

보고서를 생성하는 내 코드는 다음과 같다 :

if (params.format) { 
     String svg = params.svg 
     def imagePath = fetchService.getChartImage(svg) 

     FastReportBuilder drb = new FastReportBuilder(); 
     if (imagePath && imagePath!='') { 
      drb.setTemplateFile(root+"/reports/template_chart.jrxml") 
     } else { 
      drb.setTemplateFile(root+"/reports/template.jrxml") 
     } 
     Style changeStyle = new Style() 
     changeStyle.setHorizontalAlign(HorizontalAlign.CENTER) 

     DynamicReport dr = drb.addColumn("S.N", "S.N",Integer.class.getName(),30, changeStyle). 
       addColumn("Top 20", "Top 20 ",String.class.getName(),150). 
       addColumn("Reporting ","Reporting ",Double.class.getName(), 50, false, '$0.00'). 
       addColumn("Comparison ","Comparison ",Double.class.getName(), 50, false, '$0.00'). 

       addColumn("Prior Period Ranking","Prior Period Ranking",String.class.getName(), 50, changeStyle). 
       setTitle(" "). 

       setUseFullPageWidth(true). 

       build(); 

     JRDataSource ds = new JRBeanCollectionDataSource(data); 
     JasperPrint jp = DynamicJasperHelper.generateJasperPrint(dr,new ClassicLayoutManager(), ds); 


     HashMap reportParam = new HashMap(); 
     reportParam.put("TITLE","Top 20 "); 
     reportParam.put("IMAGE_LINK",root+"/images/report_logo.jpg"); 
     reportParam.put("CHART_IMAGE",imagePath); 

     generateReport(params.format, jp) 

     fetchService.deleteTempFile(imagePath) 
     return 
    } 


    [data: data, columns: columns , totalRep : totalRep, totalCom:totalCom, currentPage:''] 
} 


def generateReport(String format, JasperPrint jp){ 
    ReportWriter reportWriter 

    switch (format) { 
     case "word": 
      JRDocxExporter docExporter = new JRDocxExporter(); 
      ByteArrayOutputStream docStream = new ByteArrayOutputStream(); 
      docExporter.setParameter(JRDocxExporterParameter.JASPER_PRINT,jp); 
      docExporter.setParameter(JRDocxExporterParameter.OUTPUT_STREAM,docStream); 
      docExporter.setParameter(JRDocxExporterParameter.FLEXIBLE_ROW_HEIGHT, Boolean.TRUE); 
      docExporter.exportReport(); 
      def docResume = docStream.toByteArray(); 

      response.setHeader("Content-disposition", "attachment; filename=\"" + "Report" + ".docx\""); 
      response.outputStream << docResume 

     case "excel": 
      reportWriter = ReportWriterFactory.getInstance().getReportWriter(jp, 'XLS', [:]); 
      response.setHeader("Content-disposition", "attachment; filename=\"" + "Report" + ".xls\""); 
      break 

     default: 
      reportWriter = ReportWriterFactory.getInstance().getReportWriter(jp, 'PDF', [:]); 
      response.setHeader("Content-disposition", "attachment; filename=\"" + "Report" + ".pdf\""); 

      break 
    } 
    reportWriter?.writeTo(response); 

    return 
} 
당신은 속성을 설정하는 JasperReportBuilder에서 유형의 개체를 만들 수 있습니다

답변

0

신고하기 : SubreportBuilder

JasperReportBuilder jrbSR = report(); 

는 개체를 만들 :

SubreportBuilder Your_OBject= cmp.subreport(your_method(columns, your_data)); 

인쇄하여 하위 보고서 :

jrb.detail(subreportTotal); 
관련 문제