Clase BodyContentHandler en Java

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *