ireport制作报表pageheader只在第一页出现的解决办法
时间: 2023-11-28 20:47:55 浏览: 88
你可以在iReport中使用一个特殊的变量"$V{PAGE_NUMBER}"来判断当前页码是否为第一页,从而控制PageHeader的显示。
具体操作步骤如下:
1. 右键点击报表设计区域,选择“Report Properties”,打开报表属性设置窗口。
2. 在“Parameters”选项卡中,点击“Add”按钮,添加一个参数,命名为“isFirstPage”,类型为“java.lang.Boolean”。
3. 在“Variables”选项卡中,点击“Add”按钮,添加一个变量,命名为“pageHeaderDisplayed”,类型为“java.lang.Boolean”,初始值为“false”。
4. 在报表设计区域中添加一个PageHeader元素,并在其中添加需要显示的内容。
5. 右键点击PageHeader元素,选择“Properties”,打开元素属性设置窗口。在“Print When Expression”文本框中输入以下表达式:
$V{PAGE_NUMBER} == 1 && $P{isFirstPage} == true && $V{pageHeaderDisplayed} == false
这个表达式的意思是:如果当前页码为1,并且isFirstPage参数为true,并且pageHeaderDisplayed变量为false,则显示PageHeader元素。
6. 在PageHeader元素的“Properties”窗口中,找到“Print When Expression”属性下方的“Evaluation Time”选项,选择“First Page”。
7. 在报表的Java代码中设置isFirstPage参数为true,并在PageFooter中设置pageHeaderDisplayed变量为true,以确保PageHeader只在第一页出现。
参考代码如下:
```
Map<String, Object> params = new HashMap<String, Object>();
params.put("isFirstPage", true);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, dataSource);
// 在PageFooter中设置pageHeaderDisplayed变量为true
JRDesignVariable pageHeaderDisplayed = new JRDesignVariable();
pageHeaderDisplayed.setName("pageHeaderDisplayed");
pageHeaderDisplayed.setValueClass(Boolean.class);
pageHeaderDisplayed.setResetType(ResetTypeEnum.REPORT);
pageHeaderDisplayed.setCalculation(CalculationEnum.NOTHING);
pageHeaderDisplayed.setIncrementerFactoryClass(DefaultIncrementerFactory.class);
pageHeaderDisplayed.setIncrementerFactoryClassName(DefaultIncrementerFactory.class.getName());
pageHeaderDisplayed.setInitialValueExpression(new JRDesignExpression(Boolean.FALSE));
jasperDesign.addVariable(pageHeaderDisplayed);
```
这样就可以实现PageHeader只在第一页出现了。
阅读全文