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"))

where等于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 个报告导出为一个。这可以通过使用JRPrintServiceExporter. 基本上创建三个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 回答