Apache Tika es una biblioteca que le permite extraer datos de diferentes documentos ( .PDF , .DOCX , etc.). En este tutorial, extraeremos datos usando BodyContentHandler. La siguiente dependencia que se usará se muestra a continuación:
<dependency> <groupId>org.apache.tika < / groupId > <artifactId>tika - parsers < / artifactId > <version>1.26 < / version > < / dependency >
BodyContentHandler es un decorador de clases que permite obtener todo dentro de la etiqueta XHTML <body>. <body> o <body/> no se incluirán en el valor del resultado.
Analicemos primero varios constructores de esta clase de la siguiente manera:
Manejador de contenido del cuerpo() | Escribe todo el contenido en un búfer de string interno, para obtener contenido simplemente llame a String(). De forma predeterminada, la longitud máxima del contenido es de 100 000 caracteres. Si se alcanza este límite, se lanzará una SAXException . |
---|---|
BodyContentHandler (límite de escritura) |
Escribe todo el contenido en un búfer de string interno, para obtener contenido simplemente llame a String(). ‘límite de escritura’ es el número máximo de caracteres que se pueden leer, configure -1 para deshabilitar el límite. Si se alcanza este límite, se lanzará una SAXException . |
BodyContentHandler(Stream de salida stream de salida) | Escribe todo el contenido en un outputStream dado. Sin ningún límite de contenido. |
BodyContentHandler (Escritor escritor) | Escribe todo el contenido en un escritor determinado. Sin ningún límite de contenido. |
BodyContentHandler (controlador ContentHandler) | Pasa todo el contenido a un controlador determinado. |
Los métodos de esta clase son los siguientes:
Método | Acción realizada |
---|---|
MatchingContentHandler | Le permite obtener datos por XPath |
Nota: la clase BodyContentHandler no implementa ningún método de la interfaz ContentHandler ,solo describe XPath para MatchingContentHandler para obtener el contenido del cuerpo XHTML.
Implementación:
Ejemplo 1: leer todo en el búfer de string interno
Java
// Java Program to Read Everything into Inner String Buffer // Main class public class GFG { // Method 1 // To parse the string public String parseToStringExample(String fileName) throws IOException, TikaException, SAXException { // Creating an object of InputStream class InputStream stream = this.getClass() .getClassLoader() .getResourceAsStream(fileName); Parser parser = new AutoDetectParser(); ContentHandler handler = new BodyContentHandler(); Metadata metadata = new Metadata(); ParseContext context = new ParseContext(); // Parsing the string parser.parse(stream, handler, metadata, context); return handler.toString(); } // Method 2 // Main driver method public static void main(String[] args) throws TikaException, IOException, SAXException { // Creating object of main class in main method GFG example = new GFG(); // Display message for better readability System.out.println("Result"); // Calling the method 1 to parse string by // providing file as an argument System.out.println(example.parseToStringExample( "test-reading.pdf")); } }
Producción:
Ejemplo 2: escribir contenido en un archivo especificando la longitud máxima del contenido
Java
// Java Program to Write Content into File by // Specifying the Maximum Content Length // Main class // BodyContentHandlerWriteToFileExample public class GFG { // Method 1 // Main driver method public static void main(String[] args) throws TikaException, IOException, SAXException { // Creating an object of the class GFG example = new GFG(); // Calling the Method 2 in main() method and // passing the file and directory path as arguments // to it example.writeParsedDataToFile( "test-reading.pdf", "/Users/ali_zhagparov/Desktop/pdf-content.txt"); } // Method 2 // Writing parsed data to a file public void writeParsedDataToFile(String readFromFileName, String writeToFileName) throws IOException, TikaException, SAXException { // Creating an object of InputStream InputStream stream = this.getClass() .getClassLoader() .getResourceAsStream(readFromFileName); // Creating an object of File class File yourFile = new File(writeToFileName); // If file is already existing then // no operations to be performed yourFile.createNewFile(); FileOutputStream fileOutputStream = new FileOutputStream(yourFile, false); Parser parser = new AutoDetectParser(); ContentHandler handler = new BodyContentHandler(fileOutputStream); Metadata metadata = new Metadata(); ParseContext context = new ParseContext(); parser.parse(stream, handler, metadata, context); } }
Producción:
No hay nada visible en la ventana de la consola, ya que hay una asignación de directorios de archivos donde, en este caso, intenta escribir toda la información en un archivo.
El programa da como resultado un contenido de archivo ‘.txt’ con ‘.pdf’ que es el siguiente:
Publicación traducida automáticamente
Artículo escrito por alijakparovkz y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA