Extração de texto
Extração de texto
Aspose.PDF FOSS for .NET provides several mechanisms for extracting text from Páginas em PDF. TextFragmentAbsorber é a ferramenta principal ele digitaliza o conteúdo da página e retornos estruturados TextFragment objetos com posição, fonte e estilo informação.
Extração de texto básico
TextAbsorber Extrair todo o texto de uma página ou documento como uma única cadeia.
using var doc = Document.Open(pdfBytes);
var absorber = new TextAbsorber();
doc.Pages[1].Accept(absorber);
string pageText = absorber.Text;Extração de fragmentos de texto
TextFragmentAbsorber Cada um deles fornece resultados estruturados. TextFragment Inclui o texto extraído, a sua posição na página e os pormenores da fonte.
using var doc = Document.Open(pdfBytes);
var absorber = new TextFragmentAbsorber();
doc.Pages[1].Accept(absorber);
foreach (var fragment in absorber.TextFragments)
{
Console.WriteLine($"Text: {fragment.Text}");
Console.WriteLine($"Position: ({fragment.Position.XIndent}, {fragment.Position.YIndent})");
Console.WriteLine($"Font: {fragment.TextState.Font.FontName}");
}Buscar com expressões regulares
Passe um padrão de regex para TextFragmentAbsorber para encontrar um texto específico.
var absorber = new TextFragmentAbsorber(@"\d{3}-\d{2}-\d{4}");
doc.Pages.Accept(absorber); // Search all pages
foreach (var fragment in absorber.TextFragments)
{
Console.WriteLine($"Found: {fragment.Text}");
}Segmentos de texto
Cada um. TextFragment podem conter múltiplas TextSegment Objetos quando o texto abrange diferentes tipos de letra.
foreach (var fragment in absorber.TextFragments)
{
foreach (var segment in fragment.Segments)
{
Console.WriteLine($"Segment: {segment.Text}, Font: {segment.TextState.Font.FontName}");
}
}Gestão de fontes
FontRepository fornece métodos para encontrar e carregar fontes.
var font = FontRepository.FindFont("Helvetica");Parágrafos de texto de construção
TextParagraph permite a construção de blocos de texto multi-linhas para inserção em Uma página.
var paragraph = new TextParagraph();
paragraph.AppendLine(new TextFragment("First line"));
paragraph.AppendLine(new TextFragment("Second line"));Dicas e melhores práticas
- Utilização:
TextFragmentAbsorberquando precisar de dados de posição e fonte; utilizarTextAbsorberpara extração de texto simples. - Aceitar o absorvente numa única página para obter resultados mais rápidos, ou em uma outra.
doc.PagesPara procurar o documento inteiro. - A busca de expressões regulares é sensível a maiúsculas por padrão uso
(?i)Prefixo para correspondência sem sensibilidade a maiúsculas. - Verificação
TextState.Font.IsEmbeddedPara determinar se uma fonte está incorporada no PDF. - Para documentos grandes, processar páginas uma de cada vez para gerenciar o uso da memória.
Problemas comuns
| Emissão | Causa da morte | Correção |
|---|---|---|
| Texto extraído é distorcido. | PDF usa uma codificação não padrão ou mapeamento de fonte CID | Verifique a incorporação de fontes; alguns PDFs digitalizados requerem OCR |
| Não encontrou fragmentos de texto. | O conteúdo da página é uma imagem, não texto. | Use uma ferramenta de OCR para converter páginas de imagem em texto primeiro |
| Regex não retorna correspondências | Padrão não contabiliza o espaço em branco inserido pelo layout de texto PDF | Normalize o espaço branco ou use um padrão mais solto |
TextState.Font é nulo. | Falta recurso de fonte no PDF | Manter verificações de nulo ao inspecionar propriedades da fonte |
FAQ
Posso extrair texto de uma região específica da página?
Sim, está pronto. TextFragmentAbsorber.TextSearchOptions.Rectangle Para limitar a busca . para uma área específica da página.
A extração de texto preserva a ordem da leitura?
A biblioteca retorna o texto na ordem do fluxo de conteúdo. Para layouts com várias colunas, talvez seja necessário classificar os fragmentos por posição.
Posso extrair texto de todas as páginas ao mesmo tempo?
Sim, liga. doc.Pages.Accept(absorber) Para procurar em todas as páginas do documento.
Resumo de referência da API
| Classe / Método | Descrição: |
|---|---|
TextAbsorber | Extrair todo o texto como uma única cadeia de caracteres . |
TextFragmentAbsorber | Extrair fragmentos de texto estruturados com dados de posição e fonte |
TextFragment | Um texto executado com posição, estado de texto e segmentos |
TextFragment.Text | A cadeia de texto extraída |
TextFragment.Position | Coordenadas na página |
TextFragment.TextState | Informações sobre fonte, tamanho e cor |
TextFragment.Segments | Sub-corridas no fragmento |
TextParagraph | Construidor para blocos de texto com várias linhas |
TextState | Nome da fonte, tamanho, cor e propriedades de estilo |
FontRepository | Busca e carregamento de fontes estáticas |
FontRepository.FindFont | Encontre uma fonte pelo nome |