Detección de Tablas con Bordes Punteados utilizando ReadDocumentAdvanced
ReadDocumentAdvanced extrae datos de tabla celda por celda, pero no puede detectar tablas cuyos bordes son punteados o discontinuos (por ejemplo, border: 1px dotted black). El texto en la página puede seguir siendo legible, pero acceder al objeto tabla falla porque el motor nunca reconoce la tabla.
Cuando llamas a ReadDocumentAdvanced en un documento con una tabla de bordes punteados y luego lees sus celdas, arroja:
Unhandled exception. System.InvalidOperationException: Sequence contains no elements
Los huecos entre los puntos rompen el borde en segmentos discontinuos, por lo que el motor OCR no ve un contorno continuo para tratar como un límite de tabla. Sin Tables detectado, Tables.First() no tiene nada que devolver.
Solución
Aplica el filtro Dilate() antes de procesar. La dilatación expande los píxeles oscuros en la imagen, cerrando los huecos entre los puntos para que el borde se lea como una línea sólida. El motor puede entonces detectar el objeto tabla y devolver sus celdas.
1. Habilitar la lectura de tablas y cargar el input
Activa ReadDataTables para que el motor construya una salida de tabla estructurada, luego carga tu imagen.
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. Dilatar antes de leer
Llama a Dilate() en la entrada para fusionar el borde punteado en un contorno continuo, luego ejecuta 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() convierte las líneas punteadas visuales en bordes sólidos que el motor puede trazar, por lo que res.Tables ahora está poblado y el texto de la celda se lee claramente. La llamada SaveAsImages es opcional; le permite inspeccionar la imagen dilatada para confirmar que los bordes se cerraron como se esperaba.


