2

詳細バンドに配置されたフレームにサブレポートを連結することは可能ですか?目標は、これらのサブレポートと、テンプレートの詳細セクションで以前に定義された要素を表示することです。

テンプレートからロードされる詳細レポートにサブレポートを使用dynamicReportBuilder.setTemplateFile(TEMPLATE);dynamicReportBuilder.addConcatenatedReport(subreport);て挿入すると、レポートテンプレートの詳細セットで以前に定義された要素が消えます。だから私はこれらの要素を保存する方法を探しています。

4

2 に答える 2

1

あなたのコメントに基づいて、2 つのことのいずれかが起こっているようです。

Detail1)テンプレート ファイルのバンドにサブレポートが定義されている。

この場合、機能しません。テンプレート ファイルのDetailバンドは空である必要があります。これが事実である場合、そこにあるものを無視して、他のすべてを行う可能性が高くなります. 詳細については、カスタム jrxml テンプレートの使用方法を確認してください。

2)dynamicReportBuilder.addConcatenatedReport(subreport);自分が思っていることをしない。

このメソッドは、最初のレポートの最後に 2 番目のレポートを追加します。それをバッチと考えてください。JASPER_PRINT_LISTJasper Reports API を直接使用する場合、値をエクスポート パラメータとして設定するのと同じことです。詳細については、HOW-TO Add Concatenated Reportsを参照してください。


Dynamic Jasper は優れたライブラリですが、実際には標準の表形式のレポートでのみ動作するように設計されています。サブレポートを含むいくつかの高度な機能をサポートしていますが、制限がある場合があります。

これまでのところ、サブレポートはグループ ヘッダーとグループ フッターにしか追加できないようです。したがって、あなたの場合、最初に を使用してレポートするグループを追加する必要があるでしょうGroupBuilder。次に、サブレポートをグループ フッターに追加できます。グループの秘訣は、グループ化する適切なフィールドを選択して、各行が最終的に独自のグループになるようにすることです。

グループの作成方法については、グループのヘッダーとフッターにラベルを追加する方法のコード例を参照してください。

サブレポートをレポートに追加する方法を確認するには、DynamicReportBuilder.addSubreportInGroupFooter()メソッドを使用できます。この部分の詳細と例については、HOW-TO Add Subreports (fast way) を参照してください。

もう 1 つのオプションは、この特定のレポートに Dynamic Jasper を使用せず、jrxml ファイルと Jasper Report の API を使用して自分で行うことです。セットアップによっては、簡単になる場合とそうでない場合があります。

于 2012-06-27T13:24:24.977 に答える
0

リカルド・マリアカ著。このコードは解決策です。Ricardo と Dynamic Report に感謝します

    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;
}

}

于 2012-06-28T22:13:46.920 に答える