Telerik Reporting:组页数为奇数时如何添加空白页?
Telerik Reporting 分组末尾自动添加空白页(双面打印适配)
一、TRDP文件内通过表达式实现
无需编程,直接在报表设计器中配置分组脚注的分页条件即可:
选中目标分组(如按
GroupId分组的组)的GroupFooterSection(若没有则添加一个)。在属性面板中找到
PageBreak->After属性,设置条件表达式:= IIF((PageCount("GroupId") Mod 2 = 1) AND (PageNumber("GroupId") = PageCount("GroupId")), PageBreak.After, PageBreak.None)说明:
PageCount("GroupId"):获取当前分组的总页数(GroupId需替换为你报表中分组的Name属性值,不是字段名)。PageNumber("GroupId"):获取当前页在分组内的页码。- 当分组总页数为奇数,且当前页是分组最后一页时,在组脚注后添加分页(自动生成空白页),确保下一组从新纸张开始。
若组脚注本身不需要显示内容,可将其高度设为0,隐藏所有控件,避免额外内容干扰。
二、通过Telerik Reporting Processing API编程实现
如果需要在后台生成报表时动态控制,可通过Processing API的事件插入空白页:
步骤1:加载报表并注册事件
using Telerik.Reporting; using Telerik.Reporting.Processing; var reportProcessor = new ReportProcessor(); var reportSource = new UriReportSource { Uri = "YourReport.trdp" }; // 跟踪每个分组的页数 var groupPageTracker = new Dictionary<string, int>(); string currentGroupKey = null; // 注册PageCreated事件处理分页逻辑 reportProcessor.PageCreated += (sender, e) => { // 获取当前页所属的分组上下文 var groupItem = e.Page.ReportItem as Group; if (groupItem != null && groupItem.Name == "GroupId") // 匹配目标分组名称 { currentGroupKey = groupItem.Value.ToString(); if (!groupPageTracker.ContainsKey(currentGroupKey)) { groupPageTracker[currentGroupKey] = 0; } groupPageTracker[currentGroupKey]++; } // 判断是否为当前分组的最后一页 if (!string.IsNullOrEmpty(currentGroupKey) && e.Page.IsLastPageOfGroup("GroupId")) { int totalPages = groupPageTracker[currentGroupKey]; // 总页数为奇数时插入空白页 if (totalPages % 2 != 0) { var blankPage = new Page(e.Page.Report); reportProcessor.InsertPageAfter(e.Page, blankPage); } // 重置当前分组跟踪 currentGroupKey = null; } };
步骤2:渲染报表
// 渲染为PDF(支持双面打印的格式) var renderResult = reportProcessor.RenderReport("PDF", reportSource, null); // 保存结果到文件或输出 File.WriteAllBytes(@"C:\Output\Report.pdf", renderResult.DocumentBytes);
注意事项
- 确保分组名称与代码中
groupItem.Name的取值完全匹配(报表设计器中分组的Name属性)。 - 空白页会继承原报表的页面设置(纸张大小、边距等),无需额外配置。
内容的提问来源于stack exchange,提问作者user3169483
相关产品推荐
相关产品推荐

