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

iTextSharp中自动创建表格及分表显示日期记录的实现方法

实现iTextSharp中表格自动拆分(最多5条记录)的解决方案

嘿,这事儿不难搞定!核心思路就是先计算总记录数,然后按每5条为一组拆分数据,每组生成一个独立的表格,直接看改造后的代码和解释吧:

完整实现代码

// 假设你的数据源是DataTable dt,先获取总记录数
int totalRows = dt.Rows.Count;
// 计算需要生成的表格总数(向上取整,比如6条记录就需要2个表格)
int totalTables = (int)Math.Ceiling((double)totalRows / 5);

for (int tableIndex = 0; tableIndex < totalTables; tableIndex++)
{
    // 每个表格都要重新实例化,避免所有内容叠加到同一个表格里
    PdfPTable table = new PdfPTable(dt.Columns.Count);
    table.WidthPercentage = 100; // 按需设置表格宽度占比

    // --- 第一步:添加表格表头(复用你原有的表头样式逻辑)---
    for (int c = 0; c < dt.Columns.Count; c++) 
    {
        PdfPCell cell = new PdfPCell(new Phrase(dt.Columns[c].ToString(), fntMainHeading));
        cell.Padding = 2;
        cell.BorderColor = new Color(217, 217, 217);
        table.AddCell(cell);
    }

    // --- 第二步:添加当前表格的数据行 ---
    // 计算当前表格的起始行和结束行,确保每组最多5条记录
    int startRow = tableIndex * 5;
    int endRow = Math.Min(startRow + 4, totalRows - 1); // 索引从0开始,所以+4对应5条数据

    for (int r = startRow; r <= endRow; r++)
    {
        for (int c = 0; c < dt.Columns.Count; c++)
        {
            // 这里替换成你原有的数据单元格样式逻辑
            PdfPCell cell = new PdfPCell(new Phrase(dt.Rows[r][c].ToString(), fntContent));
            cell.Padding = 2;
            cell.BorderColor = new Color(217, 217, 217);
            table.AddCell(cell);
        }
    }

    // 将当前表格添加到PDF文档中
    document.Add(table);
    // 按需添加表格之间的空白间隔,让排版更美观
    document.Add(new Paragraph("\n"));
}

关键逻辑说明

  • 表格数量计算:用Math.Ceiling向上取整,确保哪怕剩余1条记录也会生成一个单独的表格
  • 独立表格实例化:每个循环都新建PdfPTable对象,避免所有数据堆在同一个表格里
  • 数据行范围控制:通过startRow和endRow精准锁定每个表格要展示的记录,严格控制每组最多5条
  • 样式复用:表头和数据单元格的样式完全沿用你原来的代码,只新增了拆分逻辑,不用改动原有样式配置

这样不管你的数据源里有4条、10条还是更多记录,都会自动按每5条一组拆分出多个表格,依次紧跟添加到PDF里~

内容的提问来源于stack exchange,提问作者aparna rai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:58:12