使用 ReadDocumentAdvanced 检测点状边框表格
ReadDocumentAdvanced 单元格逐个提取表格数据,但无法检测边框为点状或虚线的表格(例如 border: 1px dotted black)。 页面上的文本可能仍然可读,但访问表格对象失败,因为引擎无法识别该表格。
当您对含有点状边框表格的文档调用 ReadDocumentAdvanced 并读取其单元格时,会抛出错误:
Unhandled exception. System.InvalidOperationException: Sequence contains no elements
点之间的间隙将边界分成不连续的部分,因此 OCR 引擎没有看到可作为表格边界处理的连续轮廓。 检测不到 Tables ,Tables.First() 没有要返回的内容。
解决方案
在处理之前应用 Dilate() 滤镜。 膨胀扩展图像中的深色像素,关闭点之间的间隙,使边框读取为一条实线。引擎随后可以检测表格对象并返回其单元格。
1. 启用表格读取并加载输入
打开 ReadDataTables ,以便引擎构建结构化表格输出,然后加载您的图像。
var ocr = new IronTesseract();
ocr.Configuration.ReadDataTables = true;
var input = new OcrInput();
input.Load("image-20250408-144240.png");
var ocr = new IronTesseract();
ocr.Configuration.ReadDataTables = true;
var input = new OcrInput();
input.Load("image-20250408-144240.png");
Imports IronTesseract
Dim ocr As New IronTesseract()
ocr.Configuration.ReadDataTables = True
Dim input As New OcrInput()
input.Load("image-20250408-144240.png")

2. 在读取之前膨胀
在输入上调用 Dilate() ,将点状边框合并为连续轮廓,然后运行 ReadDocumentAdvanced。
input.Dilate();
input.SaveAsImages("export.png", AnyBitmap.ImageFormat.Png);
var res = ocr.ReadDocumentAdvanced(input);
Console.WriteLine(res.Tables.First().CellInfos.First().CellText);
input.Dilate();
input.SaveAsImages("export.png", AnyBitmap.ImageFormat.Png);
var res = ocr.ReadDocumentAdvanced(input);
Console.WriteLine(res.Tables.First().CellInfos.First().CellText);
Dim res = ocr.ReadDocumentAdvanced(input)
input.Dilate()
input.SaveAsImages("export.png", AnyBitmap.ImageFormat.Png)
Console.WriteLine(res.Tables.First().CellInfos.First().CellText)
Dilate() 将视觉点状线转换为引擎可以追踪的实线边框,因此 res.Tables 现在被填充,单元格的文本读取得很清楚。 SaveAsImages 调用是可选的; 它允许您检查膨胀图像以确认边界如预期关闭。


