# 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:
```txt
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.
```csharp
var ocr = new IronTesseract();
ocr.Configuration.ReadDataTables = true;
var input = 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`.
```csharp
input.Dilate();
input.SaveAsImages("export.png", AnyBitmap.ImageFormat.Png);
var res = ocr.ReadDocumentAdvanced(input);
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.

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
Unhandled exception. System.InvalidOperationException: Sequence contains no elements
Text
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");
C#
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);
C#
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.
Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien estructurados y visualmente atractivos.