如何用C#按PDF原有表格格式读取内容以提取指定键值?
解决PDF表格键值提取的方案
嘿,我完全懂你遇到的痛点——用iTextSharp处理PDF表格时,它一股脑把内容全吐出来,根本没法直接对应表格里的键值对吧?我之前也踩过这个坑,给你几个靠谱的解决方案试试:
1. 升级到iText 7(iTextSharp的现代替代)
iTextSharp已经进入维护状态了,它的后续版本iText 7专门强化了表格解析能力,能精准识别表格的行、列和单元格结构,帮你轻松匹配键值对。
下面是一个简单的示例代码:
using iText.Kernel.Pdf; using iText.Kernel.Pdf.Canvas.Parser; using iText.Kernel.Pdf.Canvas.Parser.Listener; // 打开PDF文档 var pdfDoc = new PdfDocument(new PdfReader("target-file.pdf")); // 创建表格提取监听器 var tableListener = new TableTextExtractionStrategy(); // 遍历每一页 for (int pageNum = 1; pageNum <= pdfDoc.GetNumberOfPages(); pageNum++) { var processor = new PdfCanvasProcessor(tableListener); processor.ProcessPageContent(pdfDoc.GetPage(pageNum)); // 获取当前页的所有表格 var tables = tableListener.GetTables(); foreach (var table in tables) { // 遍历表格的每一行 foreach (var row in table.GetRows()) { var cells = row.GetCells(); // 假设表格第一列是键,第二列是值 if (cells.Count >= 2) { string key = cells[0].GetText().Trim(); string value = cells[1].GetText().Trim(); // 这里可以将键值对存入字典或进行后续处理 Console.WriteLine($"提取到:{key} = {value}"); } } } } pdfDoc.Close();
2. 使用PdfPig(开源.NET PDF解析库)
PdfPig是一个轻量且易用的开源库,对PDF表格的结构识别很准确,能直接获取每个单元格的文本内容,不需要手动处理文本拼接的问题。
示例代码如下:
using UglyToad.PdfPig; using UglyToad.PdfPig.Content; // 打开PDF文件 using (var document = PdfDocument.Open("target-file.pdf")) { // 遍历每一页 foreach (var page in document.GetPages()) { // 获取当前页的所有表格 var tables = page.GetTables(); foreach (var table in tables) { // 遍历表格行 foreach (var row in table.Rows) { var cells = row.Cells; // 根据你的表格结构提取键值 if (cells.Count >= 2) { string key = cells[0].Text.Trim(); string value = cells[1].Text.Trim(); // 处理提取到的键值对 } } } } }
3. 商业库选项:Syncfusion Essential PDF
如果你的需求更复杂(比如合并单元格、不规则表格),可以试试Syncfusion的Essential PDF库,它能直接将PDF表格转换为DataTable,之后你就可以像操作普通数据表一样轻松提取键值了。不过这是商业库,有免费试用版可以先测试。
额外提示:处理扫描型PDF
如果你的PDF是扫描生成的图像文件(而非原生文本PDF),上面的文本解析库都无法直接工作,需要先通过OCR工具(比如Tesseract.NET)将图像转换为可识别的文本,再用上述方法解析表格。
内容的提问来源于stack exchange,提问作者user3411135
相关产品推荐
相关产品推荐

