当前位置: 首页 > 知识库问答 >
问题:

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

穆宏胜
2023-03-14

我有一个运行垂直报告的要求,其中列名称将显示在一行中,具有相邻的值,如键值对。

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

我也尝试过使用交叉应用SQL查询以键值对的形式获取列名和值,但很难区分报表中的两个不同记录。

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

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个答案

谭梓
2023-03-14

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

我的建议是,首先尝试使用bare JasperReport(通过使用iReport/JasperStudio)获取报告的简单版本(非动态),如果您能够获取报告,那么我们可以想出一种方法来解决如何使用DJ实现这一点。

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

 类似资料:
  • 我正在使用DynamicJasper API开发pdf报告。 根据要求,我必须在页眉和页脚显示一个徽标。我可以使用DynamicReportBuilder在标题处显示徽标。addImageBanner方法。但我没有找到在页脚添加图像的方法。 我在动态jasper论坛上看到了一些关于这个问题的帖子,其中提到的一个解决方法是使用pageFooter band创建一个jrxml模板。 我尝试了这个,但没

  • 我从jacoco生成了一个代码覆盖率报告,它就是jacoco。执行官。但我不知道如何使用它。。。 我生成它的方式是通过命令行: 然后我得到了杰科科。执行报告。我所需要的只是百分比的数量,我只使用命令行。有没有办法将此报告转换为可读的txt文件? 谢谢大家

  • JasperReport—在构建了大量JRXML报告之后使用DynamicJasper 问题概述 目前,我的java软件使用编译的. jrxml文件来生成报告。但是,用户抱怨他们想要自定义报告。这基本上是所以我发现了DynamicJasper。问题是我之前构建的即用型. jasper报告有自己的布局,我最终调整了布局,为通过参数发送的徽标插入了图像占位符。 问题 有没有一种方法可以复制样式或以简单

  • 我想生成一个报告作为此设计: 我使用DynamicJasper,将2013、2012和2011视为3个不同的子报告,并尝试生成它。但我得到的2012年和2011年的数据是不同的。有人可以帮助我使用DynamicJasper设计上述布局吗?2013、2012和2011是同一行中的三个不同标题。

  • 本文向大家介绍如何垂直居中` `?相关面试题,主要包含被问及如何垂直居中` `?时的应答技巧和注意事项,需要的朋友参考一下 使用协助元素(这里是i),作为img的相邻元素,同为inline-block的两元素相邻时增加vertical-align: middle