.NET控制台应用(C#)读取PDF跨页表格解决方案咨询
.NET 8 读取跨页拆分的PDF表格解决方案
免费方案:PdfPig
PdfPig是开源的.NET PDF处理库,能精准识别表格单元格结构,避免iTextSharp左到右拼接文本的问题,还可自定义逻辑处理跨页拆分的行。
- 安装依赖:通过NuGet安装
PdfPig,命令:Install-Package PdfPig - 核心实现代码:
using UglyToad.PdfPig; using UglyToad.PdfPig.Content; using UglyToad.PdfPig.Tables; using System.Collections.Generic; using System.Linq; using (var document = PdfDocument.Open("target.pdf")) { // 读取第4到7页(页码从1开始,Skip(3)跳过前3页) var targetPages = document.GetPages().Skip(3).Take(4); var tableDetector = new TableDetector(); var allTables = new List<Table>(); // 提取每页的表格 foreach (var page in targetPages) { allTables.AddRange(tableDetector.Detect(page)); } // 合并跨页拆分的行 var mergedRows = new List<List<string>>(); List<string> pendingRow = null; foreach (var table in allTables) { int totalColumns = table.ColumnCount; foreach (var row in table.Rows) { var rowCells = row.Cells.Select(c => c.Text.Trim()).ToList(); // 判断当前行是否为上一页截断的行续接 if (pendingRow != null && rowCells.Count < totalColumns) { // 合并单元格内容 for (int i = 0; i < rowCells.Count; i++) { pendingRow[i] += $" {rowCells[i]}"; } mergedRows.Add(pendingRow); pendingRow = null; } // 当前行是截断行,标记为待合并 else if (rowCells.Count < totalColumns) { pendingRow = rowCells; } // 完整行直接加入结果 else { mergedRows.Add(rowCells); } } } // 处理最后一条待合并的行 if (pendingRow != null) { mergedRows.Add(pendingRow); } // 输出所有行数据 foreach (var row in mergedRows) { System.Console.WriteLine(string.Join("\t", row)); } } - 优势:完全免费开源,单元格识别准确,支持自定义跨页行合并逻辑,兼容.NET 8及旧版本。
付费方案:Syncfusion Essential PDF
Syncfusion是成熟的商业PDF库,内置表格自动识别与跨页合并功能,无需手动编写复杂的行合并逻辑,识别精度更高。
- 安装依赖:通过NuGet安装
Syncfusion.Pdf.Net.Core,命令:Install-Package Syncfusion.Pdf.Net.Core - 核心实现代码:
using Syncfusion.Pdf.Parsing; using Syncfusion.Pdf.Tables; // 加载PDF文档 using var loadedDocument = new PdfLoadedDocument("target.pdf"); var tableList = new List<PdfTable>(); // 提取第4到7页的表格(索引从0开始,对应页码4-7) for (int pageIndex = 3; pageIndex < 7; pageIndex++) { var loadedPage = loadedDocument.Pages[pageIndex] as PdfLoadedPage; var pageTables = PdfTableExtractor.ExtractTable(loadedPage); tableList.AddRange(pageTables); } // 自动合并跨页表格(含拆分的行) var mergedTable = PdfTable.MergeTables(tableList.ToArray()); // 遍历所有单元格数据 for (int row = 0; row < mergedTable.Rows.Count; row++) { for (int col = 0; col < mergedTable.Columns.Count; col++) { string cellContent = mergedTable.Rows[row].Cells[col].Text; System.Console.Write($"{cellContent}\t"); } System.Console.WriteLine(); } - 优势:开箱即用的跨页表格处理,支持复杂表格(如合并单元格),官方技术支持完善,兼容.NET 8及旧版本。
特殊情况处理
如果PDF是扫描生成的图片格式,需先通过OCR转换为可编辑文本:
- 免费方案:使用Tesseract.NET完成OCR,再用上述库提取表格
- 付费方案:使用Syncfusion的OCR组件,一站式完成OCR与表格提取
内容的提问来源于stack exchange,提问作者Dejan Jovanovic
相关产品推荐
相关产品推荐

