java – 如何在导出中组合多个jasper报告时重新计算页码?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 如何在导出中组合多个jasper报告时重新计算页码?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3321字,纯文字阅读大概需要5分钟。
内容图文
![java – 如何在导出中组合多个jasper报告时重新计算页码?](/upload/InfoBanner/zyjiaocheng/811/426983d5d87e4c38a48bb3a35d488a00.jpg)
我已经决定在收到聊天中的两个问题后通过这个Q / A和comment关于如何处理“组合”jasper报告中的页码的答案
在java中组合报表时使用
JasperPrint jasperPrint1 = JasperFillManager.fillReport(report1, paramMap);
JasperPrint jasperPrint2 = JasperFillManager.fillReport(report2, paramMap);
List<JasperPrint> jasperPrintList = Arrays.asList(jasperPrint1, jasperPrint2);
JRPdfExporter exporter = new JRPdfExporter();
exporter.setExporterInput(SimpleExporterInput.getInstance(jasperPrintList));
页码和总页码
<textField>
<reportElement x="435" y="30" width="80" height="20" uuid="14bad2ac-3a56-4cf4-b4dd-310b8fcd2120"/>
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA["Page "+$V{PAGE_NUMBER}+" of"]]></textFieldExpression>
</textField>
<textField evaluationTime="Report">
<reportElement x="515" y="30" width="40" height="20" uuid="06567ba6-6243-43e9-9813-f6593528524c"/>
<textFieldExpression><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>
</textField>
总是重新启动我列入的每个报告,有没有办法可以重新计算这些?
考虑到我的最终合并报告,我想在每个页面上显示当前页面(以及正确的总页数).
解决方法:
The jasper-report way would be to not combine reports in java but to use
a main report and include the different reports as subreports in this main
report, moving the page number to the main report.
但是,如果我们想在java中结合问题,我们也可以使用java来编辑和更正页码.
这个想法是在报告中设置“标记”,然后对JasperPrint进行后处理,用实际页码替换标记.
例
jrxml(使用freemaker样式没有羞耻感)
<textField>
<reportElement x="435" y="30" width="80" height="20" uuid="14bad2ac-3a56-4cf4-b4dd-310b8fcd2120"/>
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA["${CURRENT_PAGE_NUMBER}"]]></textFieldExpression>
</textField>
<textField evaluationTime="Report">
<reportElement x="515" y="30" width="40" height="20" uuid="06567ba6-6243-43e9-9813-f6593528524c"/>
<textFieldExpression><![CDATA["${TOTAL_PAGE_NUMBER}"]]></textFieldExpression>
</textField>
java的
定义我的标记
private static final String CURRENT_PAGE_NUMBER = "${CURRENT_PAGE_NUMBER}";
private static final String TOTAL_PAGE_NUMBER = "${TOTAL_PAGE_NUMBER}";
在我的报告的fillReport之后用真实的数字替换我的所有标记
//First loop on all reports to get totale page number
int totPageNumber=0;
for (JasperPrint jp : jasperPrintList) {
totPageNumber += jp.getPages().size();
}
//Second loop all reports to replace our markers with current and total number
int currentPage = 1;
for (JasperPrint jp : jasperPrintList) {
List<JRPrintPage> pages = jp.getPages();
//Loop all pages of report
for (JRPrintPage jpp : pages) {
List<JRPrintElement> elements = jpp.getElements();
//Loop all elements on page
for (JRPrintElement jpe : elements) {
//Check if text element
if (jpe instanceof JRPrintText){
JRPrintText jpt = (JRPrintText) jpe;
//Check if current page marker
if (CURRENT_PAGE_NUMBER.equals(jpt.getValue())){
jpt.setText("Page " + currentPage + " of"); //Replace marker
continue;
}
//Check if totale page marker
if (TOTAL_PAGE_NUMBER.equals(jpt.getValue())){
jpt.setText(" " + totPageNumber); //Replace marker
}
}
}
currentPage++;
}
}
注意:如果是我的一个项目中的代码,我不会嵌套这个数量的for和if语句,而是将代码提取到不同的方法,但为了清楚起见,我决定将它作为一个代码块发布
现在它准备出口了
JRPdfExporter exporter = new JRPdfExporter();
exporter.setExporterInput(SimpleExporterInput.getInstance(jasperPrintList));
....
内容总结
以上是互联网集市为您收集整理的java – 如何在导出中组合多个jasper报告时重新计算页码?全部内容,希望文章能够帮你解决java – 如何在导出中组合多个jasper报告时重新计算页码?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。