# Detectando Tabelas de Bordas Pontilhadas com ReadDocumentAdvanced
`ReadDocumentAdvanced` extrai dados de tabela célula por célula, mas não consegue detectar tabelas cujas bordas são pontilhadas ou tracejadas (por exemplo, `border: 1px dotted black`). O texto na página pode ainda ser legível, mas acessar o objeto tabela falha porque o motor nunca reconhece a tabela.
Quando você chama `ReadDocumentAdvanced` em um documento com uma tabela de borda pontilhada e então lê suas células, ele lança:
```txt
Unhandled exception. System.InvalidOperationException: Sequence contains no elements
```
As lacunas entre os pontos quebram a borda em segmentos descontínuos, então o motor OCR não vê contorno contínuo para tratar como um limite de tabela. Sem `Tables` detectadas, `Tables.First()` não tem nada a retornar.
## Solução
Aplique o filtro `Dilate()` antes de processar. A dilatação expande os pixels escuros na imagem, fechando as lacunas entre os pontos para que a borda seja lida como uma linha sólida. O motor pode então detectar o objeto tabela e retornar suas células.
### 1. Habilitar leitura de tabelas e carregar a entrada
Ative `ReadDataTables` para que o motor construa a saída da tabela estruturada, depois carregue sua imagem.
```csharp
var ocr = new IronTesseract();
ocr.Configuration.ReadDataTables = true;
var input = new OcrInput();
input.Load("image-20250408-144240.png");
```

### 2. Dilar antes de ler
Chame `Dilate()` na entrada para mesclar a borda pontilhada em um contorno contínuo, depois execute `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()` converte as linhas pontilhadas visuais em bordas sólidas que o motor pode rastrear, então `res.Tables` agora está populada e o texto da célula é lido sem problemas. A chamada `SaveAsImages` é opcional; ela permite inspecionar a imagem dilatada para confirmar que as bordas se fecharam como esperado.

ReadDocumentAdvanced extrai dados de tabela célula por célula, mas não consegue detectar tabelas cujas bordas são pontilhadas ou tracejadas (por exemplo, border: 1px dotted black). O texto na página pode ainda ser legível, mas acessar o objeto tabela falha porque o motor nunca reconhece a tabela.
Quando você chama ReadDocumentAdvanced em um documento com uma tabela de borda pontilhada e então lê suas células, ele lança:
Unhandled exception. System.InvalidOperationException: Sequence contains no elements
Unhandled exception. System.InvalidOperationException: Sequence contains no elements
Text
As lacunas entre os pontos quebram a borda em segmentos descontínuos, então o motor OCR não vê contorno contínuo para tratar como um limite de tabela. Sem Tables detectadas, Tables.First() não tem nada a retornar.
Solução
Aplique o filtro Dilate() antes de processar. A dilatação expande os pixels escuros na imagem, fechando as lacunas entre os pontos para que a borda seja lida como uma linha sólida. O motor pode então detectar o objeto tabela e retornar suas células.
1. Habilitar leitura de tabelas e carregar a entrada
Ative ReadDataTables para que o motor construa a saída da tabela estruturada, depois carregue sua imagem.
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. Dilar antes de ler
Chame Dilate() na entrada para mesclar a borda pontilhada em um contorno contínuo, depois execute 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() converte as linhas pontilhadas visuais em bordas sólidas que o motor pode rastrear, então res.Tables agora está populada e o texto da célula é lido sem problemas. A chamada SaveAsImages é opcional; ela permite inspecionar a imagem dilatada para confirmar que as bordas se fecharam como esperado.
Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.