Extracción básica de texto usando Java
La extracción básica de texto es el punto de partida para leer el contenido de un PDF en Java. Aspose.PDF ofrece dos enfoques comunes:
- Utilice
TextAbsorbercuando necesite un resultado de texto plano de un documento o de una página. - Utilice
ParagraphAbsorbercuando necesita preservar la agrupación de página, sección, párrafo, línea y fragmento.
Las páginas PDF no almacenan el texto como lo hace un documento de procesamiento de textos, por lo que el orden extraído depende del flujo de contenido y del diseño de la página. Para la extracción específica de regiones, detalles de geometría, diseños de varias columnas, anotaciones, texto resaltado o la detección de superíndice y subíndice, utilice los artículos de extracción relacionados en esta sección.
Extraer texto de todas las páginas
Utilice TextAbsorber para recopilar una secuencia de texto plano de todo el documento y escribirla en un archivo. Esta es la opción más simple cuando solo necesita el contenido de texto legible y no requiere los límites de párrafo ni las coordenadas.
- Abra el PDF de origen en una instancia de
Document. - Cree un
TextAbsorberpara acumular texto a lo largo de todo el documento. - Llame
document.getPages().accept(textAbsorber)para que cadaPagesea visitado por el absorbente. - Escriba el búfer de texto extraído en el archivo de salida.
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());
}
}
Extraer texto de una página específica
Aplique el absorbedor solo en la página que lo requiera. Los números de página en el Document (la colección de páginas) son de base 1, por lo que get_Item(1) lee la primera página.
- Abra el PDF de origen en una instancia de
Document. - Cree un
TextAbsorberpara extraer una sola página. - Llame
accept(textAbsorber)en el objetivoPageseleccionado por número de página. - Escriba el búfer de texto extraído en el archivo de salida.
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());
}
}
Extraer texto por estructura de párrafo
Utilice ParagraphAbsorber cuando necesite agrupación estructural en lugar de un único flujo de texto plano. Devuelve marcas de página con secciones, párrafos, líneas y objetos TextFragment, lo cual resulta útil cuando la salida debe preservar bloques lógicos de texto.
- Abra el PDF de origen en una instancia de
Document. - Cree un
ParagraphAbsorbery recorra todo el documento para crear resultados de marcado de página. - Itere a través de las marcas de página, secciones, párrafos, líneas y objetos
TextFragmentexpuestos por el absorber. - Construya el texto de salida con numeración explícita de página, sección y párrafo para preservar la agrupación estructural.
- Escriba el texto del párrafo extraído en el archivo de salida.
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());
}
}