PDF tornou-se um dos formatos de documento mais usados em vários campos. Em vários casos, é usado para gerar faturas em que os dados parecem estar em forma de tabela. Nesses casos, pode ser necessário analisar o PDF para ler os dados das tabelas programaticamente. Para conseguir isso, o artigo aborda como extrair dados de tabelas PDF usando C#.
- API C# para extrair tabelas PDF
- Extrair dados de tabelas PDF em C#
- Extrair tabela de uma área específica da página
API C# para extrair tabelas de PDF
Para extrair os dados das tabelas em arquivos PDF, usaremos Aspose.PDF for .NET. É uma API poderosa que fornece uma ampla gama de recursos de manipulação de PDF. Você pode baixar a API ou instalá-la usando NuGet.
PM> Install-Package Aspose.PDF
Extrair dados de tabelas PDF em C#
A seguir estão as etapas para extrair dados de tabelas em um PDF usando C#.
- Carregue o documento PDF usando a classe Document.
- Percorra as páginas em PDF usando a coleção Document.Pages.
- Em cada iteração, inicialize o objeto TableAbsorber e visite a página selecionada usando o método TableAbsorber.Visit(Page).
- Em um loop aninhado, itere pela lista de tabelas na coleção TableAbsorber.TableList.
- Para cada AbsorbedTable na coleção, itere pela coleção de linhas em AbsorbedTable.RowList.
- Para cada AbsorbedRow na coleção, itere pela coleção de células em AbsorbedRow.CellList.
- Por fim, percorra a coleção TextFragments de cada AbsorbedCell e imprima o texto.
O exemplo de código a seguir mostra como extrair texto da tabela PDF em C#.
// Carregar documento PDF de origem
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf");
// Percorra as páginas
foreach (var page in pdfDocument.Pages)
{
// Crie um absorvente de mesa e visite a página
Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
absorber.Visit(page);
// Faça um loop em cada tabela absorvida
foreach (AbsorbedTable table in absorber.TableList)
{
Console.WriteLine("Table");
// Percorrer cada linha na tabela
foreach (AbsorbedRow row in table.RowList)
{
// Percorrer cada célula na linha
foreach (AbsorbedCell cell in row.CellList)
{
// Faça um loop pelos fragmentos de texto
foreach (TextFragment fragment in cell.TextFragments)
{
var sb = new StringBuilder();
foreach (TextSegment seg in fragment.Segments)
sb.Append(seg.Text);
Console.Write($"{sb.ToString()}|");
}
}
Console.WriteLine();
}
}
}
Extrair tabela de uma área específica da página
A seguir estão as etapas para extrair uma tabela de uma parte específica da página em um PDF usando C#.
- Carregue o documento PDF usando a classe Document.
- Selecione a Página desejada na coleção Document.Pages.
- Extraia a anotação Square da página.
- Inicialize o objeto TableAbsorber e visite a página usando o método TableAbsorber.Visit(Page).
- Em um loop aninhado, itere pela lista de tabelas na coleção TableAbsorber.TableList.
- Se a tabela estiver na região, execute as etapas a seguir.
- Itere através da coleção de linhas em AbsorbedTable.RowList.
- Para cada AbsorbedRow na coleção, itere pela coleção de células em AbsorbedRow.CellList.
- Por fim, percorra a coleção TextFragments de cada AbsorbedCell e imprima o texto.
O exemplo de código a seguir mostra como extrair a tabela de uma região específica da página PDF.
// Carregar documento PDF de origem
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf");
// Selecione a página e extraia sua anotação quadrada
var page = pdfDocument.Pages[1];
var squareAnnotation =
page.Annotations.FirstOrDefault(ann => ann.AnnotationType == Annotations.AnnotationType.Square)
as Annotations.SquareAnnotation;
// Crie absorvente de mesa e visite a página
Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
absorber.Visit(page);
// Percorra cada tabela absorvida na lista
foreach (AbsorbedTable table in absorber.TableList)
{
var isInRegion = (squareAnnotation.Rect.LLX < table.Rectangle.LLX) &&
(squareAnnotation.Rect.LLY < table.Rectangle.LLY) &&
(squareAnnotation.Rect.URX > table.Rectangle.URX) &&
(squareAnnotation.Rect.URY > table.Rectangle.URY);
if (isInRegion)
{
// Percorrer cada linha da tabela
foreach (AbsorbedRow row in table.RowList)
{
// Percorrer cada célula na linha
foreach (AbsorbedCell cell in row.CellList)
{
// Percorra os fragmentos de texto e imprima o texto
foreach (TextFragment fragment in cell.TextFragments)
{
var sb = new StringBuilder();
foreach (TextSegment seg in fragment.Segments)
{
sb.Append(seg.Text);
}
var text = sb.ToString();
Console.Write($"{text}|");
}
}
Console.WriteLine();
}
}
}
Obtenha uma licença gratuita
Você pode usar o Aspose.PDF para .NET sem limitações de avaliação usando uma licença temporária.
Conclusão
Neste artigo, você aprendeu como extrair dados de tabelas em um PDF usando C#. Além disso, você viu como extrair uma tabela de uma região específica da página em PDF. Você pode explorar mais sobre a API de PDF C# usando a documentação. Além disso, você pode postar suas dúvidas em nosso fórum.