java - 如何使用 DynamicJasper 运行垂直报告(列作为值)?
问题描述
我需要运行垂直报告,其中列名称将显示在具有相邻值的行中,例如键值对。
我正在尝试使用属性 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
解决方案
始终将 DynamicJasper 视为 JasperReports 的便捷工具/包装器。如果 JasperReport 本身无法满足您的需求,DJ 也不会。
我的建议是,如果您设法获得报告,首先尝试使用裸 JasperReport(通过使用 iReport/JasperStudio)获得报告的简单版本(非动态),然后我们可以想办法弄清楚如何实现这一点使用 DJ。
大多数时候,如果可行,您将轻松获得所需的属性/配置,并且您将知道如何使用 DJ 构建您的报告。
推荐阅读
- linux - Tomcat 9 在终端 [ubuntu 18.04] 上启动,但未在浏览器中加载
- swift - SwiftUI 列出空状态视图/修改器
- python - Python中的张量流eval()函数
- node.js - Chart.js 误读标签和轴的数组
- javascript - 获取网页上用户选择的文本中包含的元素列表
- java - Java 中 DTO 对象的替代方案
- java - 超过 64k 方法非 Multidex 调试解决方案
- python - 复制命令阻止 postgres 中的其他会话
- xamarin - 如何在 Xamarin Forms 自定义渲染器中获取 UIView 大小
- react-native - 安装 react-native-keychain 后编译失败(android)