如何使用DynamicJasper运行垂直报告(列为值)?

时间:2019-05-22 10:31:01

标签: java jasper-reports dynamic-jasper

我需要运行垂直报告,在该报告中,列名将与关键值对之类的相邻值一起显示在一行中。

我正在尝试使用属性printOrder,但不确定在哪里可以实现相同的功能。

我已经尝试使用CROSS Apply SQL Query来获取列名和值作为键值对,但是我很难在报告中区分2个不同的记录。

以下是我正在运行的代码:

drb = new DynamicReportBuilder();
drb.setMargins(10, 10, 10, 10)
    .setTitleHeight(50)
    .setDetailHeight(12)
    .setHeaderHeight(22)
    .setGrandTotalLegend("Total Count : ")
    .setGrandTotalLegendStyle(headerVariables)
    .setPrintBackgroundOnOddRows(true)
    .setDefaultStyles(titleStyle, null, headerStyle, detailStyle)
    .setPageSizeAndOrientation(Page.Page_A4_Landscape());

AbstractColumn callID = ColumnBuilder.getNew()
    .setColumnProperty("Cname", String.class.getName())
    .setTitle("COLUMN NAME").setWidth(80).build();

AbstractColumn   callbeginTime = ColumnBuilder.getNew()
    .setColumnProperty("data", String.class.getName())
    .setTitle("CALL DATA").setWidth(80).build();
drb.addColumn(callID);
drb.addColumn(callbeginTime);
drb.setTitle("New report");

drb.addAutoText(AutoText.AUTOTEXT_PAGE_X_SLASH_Y, AutoText.POSITION_FOOTER, AutoText.ALIGNMENT_RIGHT);

drb.setAllowDetailSplit(false);
drb.setUseFullPageWidth(true); 
drb.setPrintColumnNames(true);

Map<String, Object> params = new HashMap<String, Object> ();

params.put("reportTitle", "New report");
params.put("date", dtLong.format(new Date()));
params.put("reportFormat", "pdf");

DynamicReport dr = drb.build(); //create dynamic report object
//using dynamic report
JasperReport jr = DynamicJasperHelper.generateJasperReport(dr, getLayoutManager(),params);

DynamicJasperDesign dynamicJasperDesign = DynamicJasperHelper.generateJasperDesign(dr);

JRSwapFile swapFile = new JRSwapFile("E:\\report files\\", 1024, 100);
JRSwapFileVirtualizer swapVirtualizer = new JRSwapFileVirtualizer(50, swapFile, true);
System.out.println("dddd2");
params.put(StandardListComponent.PROPERTY_PRINT_ORDER,PrintOrderEnum.VERTICAL); 
params.put(JRParameter.REPORT_VIRTUALIZER, swapVirtualizer);

JasperPrint jp = JasperFillManager.fillReport(jr, params, new 

JRResultSetDataSource(ResultSet));
jp.setProperty(StandardListComponent.PROPERTY_PRINT_ORDER,"VERTICAL");

JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jp);

exporter.setParameter(JRPdfExporterParameter.OUTPUT_FILE_NAME, "e:\\report files\\final"+Math.random()+".pdf");
exporter.exportReport();

有了动态报告,我得到的价值如下:

COL1    | COL2   | COL3 
ROW1C1  | ROW1C2 | ROW1C3
ROW2C1  | ROW2C2 | ROW2C3

预期结果:

COLUMN NAME | COLUMN VALUE
COL1        | ROW1C1
COL2        | ROW1C2 
COL3        | ROW1C3 
COL1        | ROW2C1
COL2        | ROW2C2 
COL3        | ROW2C3 

1 个答案:

答案 0 :(得分:0)

始终将DynamicJasper视为JasperReports的便捷工具/包装器。如果JasperReport本身无法执行您需要的操作,那么DJ都不会。

我的建议是,如果您设法获取报告,则首先尝试使用裸JasperReport(通过使用iReport / JasperStudio)获取报告的简单版本(非动态),然后我们可以考虑一种方法来弄清楚使用DJ来实现。

在大多数情况下,如果可行,您将轻松获得所需的属性/配置,并且知道如何使用DJ构建报告。