Extração básica de texto usando Java
A extração básica de texto é o ponto de partida para ler o conteúdo de PDF em Java. Aspose.PDF oferece duas abordagens comuns:
- Use
TextAbsorberquando precisar de um resultado em texto simples de um documento ou página. - Use
ParagraphAbsorberquando precisar preservar o agrupamento de página, seção, parágrafo, linha e fragmento.
As páginas de PDF não armazenam texto como um documento de processamento de texto, portanto a ordem extraída depende do fluxo de conteúdo da página e do layout. Para extração específica de região, detalhes de geometria, layouts de múltiplas colunas, anotações, texto destacado ou detecção de sobrescrito e subscrito, use os artigos de extração relacionados nesta seção.
Extrair texto de todas as páginas
Use TextAbsorber para coletar um fluxo de texto simples de todo o documento e gravá-lo em um arquivo. Esta é a opção mais simples quando você só precisa do conteúdo de texto legível e não precisa de limites de parágrafo ou coordenadas.
- Abra o PDF de origem em uma instância de Document.
- Crie um TextAbsorber para acumular texto em todo o documento.
- Chame
document.getPages().accept(textAbsorber); assim, cada objeto Page é visitado pelo absorvedor. - Escreva o buffer de texto extraído no arquivo de saída.
public static void extractTextFromAllPages(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
TextAbsorber textAbsorber = new TextAbsorber();
document.getPages().accept(textAbsorber);
Files.writeString(outputFile, textAbsorber.getText());
}
}
Extrair texto de uma página específica
Aplique o absorvedor apenas à página desejada. A coleção de páginas de Document é indexada a partir de 1; portanto, get_Item(1) lê a primeira página.
- Abra o PDF de origem em uma instância de Document.
- Crie um TextAbsorber para extração de página única.
- Chame
accept(textAbsorber)na página de destino Page selecionada pelo número da página. - Escreva o buffer de texto extraído no arquivo de saída.
public static void extractTextFromPage(Path inputFile, Path outputFile, int pageNumber) throws Exception {
try (Document document = new Document(inputFile.toString())) {
TextAbsorber textAbsorber = new TextAbsorber();
document.getPages().get_Item(pageNumber).accept(textAbsorber);
Files.writeString(outputFile, textAbsorber.getText());
}
}
Extrair texto por estrutura de parágrafo
Use ParagraphAbsorber quando precisar de agrupamento estrutural em vez de um único fluxo de texto simples. Ele devolve marcações de página com seções, parágrafos, linhas e objetos TextFragment, o que é útil quando a saída deve preservar blocos lógicos de texto.
- Abra o PDF de origem em uma instância de Document.
- Crie um ParagraphAbsorber e visite todo o documento para gerar resultados de marcação de página.
- Itere através das marcações de página, seções, parágrafos, linhas e objetos TextFragment expostos pelo absorvedor.
- Construa o texto de saída com numeração explícita de página, seção e parágrafo, de modo que o agrupamento estrutural seja preservado.
- Escreva o texto do parágrafo extraído no arquivo de saída.
public static void extractParagraphsFromPdf(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
ParagraphAbsorber absorber = new ParagraphAbsorber();
absorber.visit(document);
StringBuilder text = new StringBuilder();
for (PageMarkup pageMarkup : absorber.getPageMarkups()) {
int sectionIndex = 1;
for (MarkupSection section : pageMarkup.getSections()) {
int paragraphIndex = 1;
for (MarkupParagraph paragraph : section.getParagraphs()) {
StringBuilder paragraphText = new StringBuilder();
for (List<TextFragment> line : paragraph.getLines()) {
for (TextFragment fragment : line) {
paragraphText.append(fragment.getText());
}
paragraphText.append("\r\n");
}
text.append("Page ").append(pageMarkup.getNumber())
.append(", Section ").append(sectionIndex)
.append(", Paragraph ").append(paragraphIndex)
.append(":\n");
text.append(paragraphText).append("\n");
paragraphIndex++;
}
sectionIndex++;
}
}
Files.writeString(outputFile, text.toString());
}
}