2012-06-26 3 views
2

세부 밴드에 배치 된 프레임에서 subReports를 연결할 수 있습니까? 목표는이 subReports와 이전에 정의 된 요소를 템플릿의 Detail 섹션에 표시하는 것입니다.프레임에서 dynamicjasper addConcatenatedReport

내가 템플릿, 보고서 템플릿 사라지게의 상세 setion에서 이전 정의 된 요소로드 세부 보고서에서 하위 보고서를 삽입 dynamicReportBuilder.setTemplateFile(TEMPLATE);dynamicReportBuilder.addConcatenatedReport(subreport);를 사용하는 경우. 그래서 나는이 요소들을 보존 할 길을 찾고 있습니다.

+0

에 감사드립니다. 더 설명해 주시겠습니까? 아니면 사진을 추가하여 자신이하려는 것을 설명하려고 할 수 있습니까? –

+0

템플릿에서로드 된 세부 리포트에 하위 리포트를 삽입하려면'dynamicReportBuilder.setTemplateFile (TEMPLATE); 및'dynamicReportBuilder.addConcatenatedReport (subreport); '를 사용하여 리포트 템플릿의 Detail 세트에있는 이전에 정의 된 요소 사라지다. 그래서 나는이 요소들을 보존 할 길을 찾고 있습니다. –

답변

1

귀하의 의견에 따르면 두 가지 중 하나가 발생하는 것 같습니다.

1) 템플릿 파일의 Detail 대역에 정의 된 하위 보고서가 있습니다.

이 경우에는 작동하지 않습니다. 템플릿 파일의 Detail 밴드는 비어 있어야합니다. 이것이 사실 인 경우 당신이 거기에 가지고있는 것을 무시하고 그 밖의 모든 것을하는 것보다 더 많은 가능성이 있습니다. 자세한 내용은 HOW-TO Use custum jrxml templates을 확인하십시오.

2) dynamicReportBuilder.addConcatenatedReport(subreport); 당신이 생각하는대로하지 않습니다.

이 방법은 첫 번째 보고서의 끝에 두 번째 보고서를 추가합니다. 그것을 배치로 더 생각하십시오. Jasper Reports API를 직접 사용할 때 JASPER_PRINT_LIST의 값을 내보내기 매개 변수로 설정하는 것과 동일한 작업입니다. 자세한 내용은 HOW-TO Add Concatenated Reports을 확인하십시오.


Dynamic Jasper는 훌륭한 라이브러리이지만 실제로는 표준 표 형식 보고서와 함께 작동하도록 설계되었습니다. 하위 보고서를 비롯한 일부 고급 기능을 지원하지만 제한적 일 수 있습니다.

내가 지금까지 찾을 수있는 것으로부터 그룹 헤더 및 그룹 바닥 글에만 하위 보고서를 추가 할 수있는 것처럼 보입니다. 따라서 귀하의 경우에는 먼저 GroupBuilder을 사용하여보고 할 그룹을 추가해야 할 것입니다. 그런 다음 하위 바닥 글을 그룹 바닥 글에 추가 할 수 있습니다. 그룹의 트릭은 그룹화 할 해당 필드를 선택하여 각 행이 자체 그룹이되도록하는 것입니다.

HOW-TO Add labels in group header and footer의 코드 예제를 보면 그룹을 만드는 방법을 볼 수 있습니다.

하위 보고서를 보고서에 추가하는 방법을 보려면 DynamicReportBuilder.addSubreportInGroupFooter() 메서드를 사용할 수 있습니다. 이 부분과 예제에 대한 자세한 내용은 HOW-TO Add Subreports (fast way)을 확인하십시오.

다른 옵션은이 특정 보고서에 Dynamic Jasper를 사용하지 말고 jrxml 파일과 Jasper Report의 API를 사용하여 직접 처리하는 것입니다. 설정에 따라 더 쉬울 수도 있고 아닐 수도 있습니다.

+0

감사합니다. @@ 센. 귀하의 의견은 매우 유용합니다. 동적 보고서 2.5.1을 사용하는 새로운 접근 방식을 찾고 있습니다. 해결책이있을 때 여기에 게시 할 것입니다. –

+0

문제는 다음과 같습니다. 첫 번째 페이지의 맨 아래에 텍스트 만 인쇄해야하고 다음 페이지에서 불필요한 공백을 인쇄하기 때문에 많은 코드를 성공적으로 시도하지 않았습니다. –

+0

하비에르 (Javier), 당신은 무엇을하려고하는지 명확히하기 위해 질문에 몇 가지 코드 또는 무언가를 게시해야합니다. 어쩌면 문제를 보여주는 작은 실행 예제 일 수 있습니다. 나는 돕고 싶다. 그러나 밖의 코드로 나는 할 수 없다. –

0

Ricardo Mariaca. 이 코드는 솔루션, 리카르도 및 동적 보고서

private void build() { 
    try { 
     JasperPdfExporterBuilder pdfExporterBuilder = export 
       .pdfExporter(PDF_FILE); 
     JasperReportBuilder jasperReportBuilderMain = report() 
       .columns(
         col.column("Item", "item", type.stringType()), 
         col.column("Quantity", "quantity", 
           type.integerType()), 
         col.column("Unit price", "unitprice", 
           type.bigDecimalType())) 
       .setDataSource(createSubreportDataSource()) 
       // .detail(cmp.subreport(createSubreport())) 
       .setWhenNoDataType(WhenNoDataType.ALL_SECTIONS_NO_DETAIL); 

     JasperReportBuilder jasperReportBuilderDisclaimer = report() 
       .setPageFormat(PageType.A4, PageOrientation.LANDSCAPE) 
       .summary(cmp.subreport(jasperReportBuilderMain)) 
       .summaryWithPageHeaderAndFooter() 
       .setWhenNoDataType(WhenNoDataType.ALL_SECTIONS_NO_DETAIL) 
       .columnHeader(
         cmp.text("first page header").setFixedHeight(50)) 
       .columnFooter(
         cmp.text(DISCLAIMER).setStretchWithOverflow(true) 
           .setFixedHeight(250)) 
       .pageHeader(
         Templates 
           .createTitleComponent("Ricardo Mariaca Approach")) 
       .pageFooter(Templates.footerComponent).show() 
       .toPdf(pdfExporterBuilder); 

    } catch (DRException e) { 
     e.printStackTrace(); 
    } 
} 

private JRDataSource createSubreportDataSource() { 
    DRDataSource dataSource = new DRDataSource("item", "quantity", 
      "unitprice"); 
    for (int i = 0; i < 180; i++) { 
     dataSource.add("Book", (int) (Math.random() * 10) + 1, 
       new BigDecimal(Math.random() * 100 + 1)); 
    } 
    return dataSource; 
} 

} 당신이 뭘 하려는지 질문에 명확하지 않다