2

iReport で jasper レポートを作成しましたが、完全に印刷できます。レポートのラベルを変更するなど、ほとんど変更を加えずに、3 つの例 (元の例、クライアントの例、部門の例) を印刷する必要があります。

PRINT_FORパラメータとして iReportに渡します。

この目標に近づく方法を知っている体はありますか?

HashMap parameters = new HashMap();
String option = "C:\\option.jasper";
JRDataSource beanDataSource = reportMapper.getDataSource();
JasperPrint jasperPrint = JasperFillManager.fillReport(option, parameters, beanDataSource);
JasperPrintManager.printPage(jasperPrint, 0, true))
4

3 に答える 3

2

Static Textフィールドを使用する代わりにText Field、式を使用してテキスト出力を決定できるaを使用できます。この場合、PRINT_FORパラメータがクライアントまたは部門と等しいかどうかを確認し、等しくない場合は元の値を使用します。あなたの表現は次のようになります:

($P{PRINT_FOR}.equals("DEPARTMENT") ? "Department Label" : ($P{PRINT_FOR}.equals("CLIENT") ? "Client Label" : "Original Label"))

ここで、は、に等しい場合にDepartment Label出力され、に等しい場合に出力され、上記のいずれにも等しくない場合に出力されます。PRINT_FORDEPARMTNENTClient LabelPRINT_FORClientOriginal Label

また、コードスニペットではPRINT_FOR、Javaコードのパラメーターの値を設定せず、ジェネリックを使用していないことにも注意してくださいHashMap。次のようになります。

Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("PRINT_FOR", "CLIENT");


更新:あなたのコメントに基づいて、基本的に3つのレポートすべてを同時に1つとしてエクスポートする必要があります。これは、を使用して実現できますJRPrintServiceExporter。基本的に3つのJasperPrintオブジェクトを作成し、それらをリストに入れます。次に、エクスポーターを使用してそれらを印刷します。何かのようなもの:

//add all three JasperPrints to the list below
List<JasperPrint> jasperPrints = new ArrayList<JasperPrint>();

...

//create an exporter
JRExporter exporter = new JRPrintServiceExporter();
//add the JasperPrints to the exporter via the JASPER_PRINT_LIST param
exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrints);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG, Boolean.FALSE);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, Boolean.TRUE);
//this one makes it so that the settings choosen in the first dialog will be applied to the
//other documents in the list also
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG_ONLY_ONCE, Boolean.TRUE);

exporter.exportReport();
于 2012-12-17T20:39:42.043 に答える
2

最初に考えるべきことは、一般的なレポートテンプレートを作成し、バージョンごとに違いを挿入できる「フック」をいくつか用意することです。Javaからのパラメータを介して「違い」を送信できます。

于 2012-12-17T14:29:40.430 に答える
0

独自の JRBeanCollectionDataSource を使用する場合、JasperPrint ごとにそれぞれの JRBeanCollectionDataSource を作成する必要があります。

        JRBeanCollectionDataSource dsCliente = new JRBeanCollectionDataSource(listaDetalle);
        JasperPrint jasperPrintCliente = JasperFillManager.fillReport("plantillaDoc.jasper", paramsHojaCliente, dsCliente);
        listaJasperPrint.add(jasperPrintCliente);

        JRBeanCollectionDataSource dsCaja1 = new JRBeanCollectionDataSource(listaDetalle);
        JasperPrint jasperPrintCaja1 = JasperFillManager.fillReport("plantillaDoc.jasper", paramsHojaCaja, dsCaja1);
        listaJasperPrint.add(jasperPrintCaja1);
于 2013-06-21T20:47:28.557 に答える