如何在不同的birt报告组中从1重新启动页码

w8rqjzmb  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(451)

背景:使用java+birt生成报表。在查看器中生成报告,并允许用户选择将其导出为不同的格式(pdf、xls、word…)。
所有程序都在“布局”中,“母版页”中没有程序。有1个“数据集”。“布局”中的字段指的是此ds。“布局”中有组,按一个字段进行分组。在“组标题”中,我创建一个单元格用作页码页码:mypagenumber“。”mypagenumber”是我定义的一个字段,它将在组头中加1。
问题:当我使用第1个方法生成报表时,“mypagenumber”无法正确显示。因为组头只为每个组加载一次。它总是显示1。
问:据我所知,crystal report中有“重新启动组中的页码”。如何在birt中重新启动页面?我想在一个报表文件中显示不同组的数据,每个组的页码从1开始。

bxjv4tth

bxjv4tth1#

您可以使用页面变量对birt报告执行此操作。例如:
添加2个页面变量。。。组\页面,组\名称。
添加1个报表变量。。。组\总\页。
在“出厂前报告”中添加脚本:

prevGroupKey = "";
groupPageNumber = 1;
reportContext.setGlobalVariable("gGROUP_NAME", "");
reportContext.setGlobalVariable("gGROUP_PAGE", 1);

在ReportonPageEnd中添加脚本:

var groupKey = currGroup; 
var prevGroupKey = reportContext.getGlobalVariable("gGROUP_NAME");
var groupPageNumber = reportContext.getGlobalVariable("gGROUP_PAGE");
if( prevGroupKey == null ){
    prevGroupKey = "";
}

if (prevGroupKey == groupKey)
{
 if (groupPageNumber != null)
{
    groupPageNumber = parseInt(groupPageNumber) + 1;
}
else {
    groupPageNumber = 1;
}
}
else {
    groupPageNumber = 1;
    prevGroupKey = groupKey;
}
reportContext.setPageVariable("GROUP_NAME", groupKey);
reportContext.setPageVariable("GROUP_PAGE", groupPageNumber);
reportContext.setGlobalVariable("gGROUP_NAME", groupKey);
reportContext.setGlobalVariable("gGROUP_PAGE", groupPageNumber);

var groupTotalPage = reportContext.getPageVariable("GROUP_TOTAL_PAGE");
if (groupTotalPage == null)
{
    groupTotalPage = new java.util.HashMap();
    reportContext.setPageVariable("GROUP_TOTAL_PAGE", groupTotalPage);
}
groupTotalPage.put(groupKey, groupPageNumber);

在母版页onrender脚本中添加以下脚本:

var totalPage = reportContext.getPageVariable("GROUP_TOTAL_PAGE");
var groupName = reportContext.getPageVariable("GROUP_NAME");
if (totalPage != null)
{ 
    this.text = java.lang.Integer.toString(totalPage.get(groupName));
}

在表组标题oncreate事件中,添加以下脚本,将“country”替换为要分组的列的名称:

currGroup = this.getRowData().getColumnValue("COUNTRY");

在母版页中,向页眉或页脚添加网格,并为组\页和组\总\页添加自动图文集变量。也可以为组名称添加page变量。
有关birt页面变量的更多信息,请查看以下链接:
https://books.google.ch/books?id=aijz4fyjoqkc&pg=pa85&lpg=pa85&dq=birt+change+autotext&source=bl&ots=k0ncmf2hrd&sig=cbor_otrw0b72szofs7lc_1mrz4&hl=en&sa=x&ei=zknavcnulylhsaxrmihocw&ved=0ceoq6aewbq#v=onepage&q=birt%20change%20autotext&f=false
https://www.youtube.com/watch?v=lw_k1qhy_gu
http://www.eclipse.org/birt/phoenix/project/notable2.5.php#jump_4
https://bugs.eclipse.org/bugs/show_bug.cgi?id=316173
http://www.eclipse.org/forums/index.php/t/575172/

a1o7rhls

a1o7rhls2#

唉,birt不支持这一点。
这可能不是你所希望的答案,但这是事实。这是birt远远落后于其他报表生成器工具的少数几个方面之一。
然而,取决于您如何将birt集成到您的环境中,我们在解决方案中成功使用的pdf导出的解决方法是可行的。这个想法是让birt根据分组生成pdf大纲。birt报告在reportcontext中创建关于它希望在何处以及如何显示页码的信息。birt生成pdf之后,一个定制的pdfpostprocessor使用pdf大纲和reportcontext中的信息,用itext添加页码。如果这项工作对你是可行的,请随时与我联系。

相关问题