Detectando Tabelas de Bordas Pontilhadas com ReadDocumentAdvanced

Curtis Chau
Curtis Chau
Updated: 29 de junho de 2026

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
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");

Tabela de entrada com bordas pontilhadas que o OCR não detecta

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);

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.

Tabela após Dilate() com bordas pontilhadas mescladas em linhas sólidas

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.

Leia mais

Pronto para começar?

Nuget Downloads 6,357,159Versão:2026.11recém-lançado