You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Telerik Reporting:组页数为奇数时如何添加空白页?

Telerik Reporting 分组末尾自动添加空白页(双面打印适配)

一、TRDP文件内通过表达式实现

无需编程,直接在报表设计器中配置分组脚注的分页条件即可:

  1. 选中目标分组(如按GroupId分组的组)的GroupFooterSection(若没有则添加一个)。

  2. 在属性面板中找到PageBreak -> After属性,设置条件表达式:

    = IIF((PageCount("GroupId") Mod 2 = 1) AND (PageNumber("GroupId") = PageCount("GroupId")), PageBreak.After, PageBreak.None)
    

    说明:

    • PageCount("GroupId"):获取当前分组的总页数(GroupId需替换为你报表中分组的Name属性值,不是字段名)。
    • PageNumber("GroupId"):获取当前页在分组内的页码。
    • 当分组总页数为奇数,且当前页是分组最后一页时,在组脚注后添加分页(自动生成空白页),确保下一组从新纸张开始。
  3. 若组脚注本身不需要显示内容,可将其高度设为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 22:13:14