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:
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.
var ocr = new IronTesseract();
ocr.Configuration.ReadDataTables = true;
var input = new OcrInput();
input.Load("image-20250408-144240.png");Dim ocr = New IronTesseract()
ocr.Configuration.ReadDataTables = True
Dim input = New OcrInput()
input.Load("image-20250408-144240.png")Dim ocr = New IronTesseract()
ocr.Configuration.ReadDataTables = True
Dim 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.
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);input.Dilate()
input.SaveAsImages("export.png", AnyBitmap.ImageFormat.Png)
Dim res = ocr.ReadDocumentAdvanced(input)
Console.WriteLine(res.Tables.First().CellInfos.First().CellText)input.Dilate()
input.SaveAsImages("export.png", AnyBitmap.ImageFormat.Png)
Dim 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.

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.