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
相关产品推荐
相关产品推荐

