Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Extraer texto e imagen, exportar como PNG y encriptar un archivo PDF

Extraer texto e imagen, exportar como PNG y encriptar un archivo PDF

Autor jc mouse viernes, mayo 3, 2019

En este post hablaremos sobre la biblioteca de Apache PDFBox el cual es una herramienta para java de código abierto que nos permite trabajar con documentos PDF. Este proyecto entre muchas funciones, te permite la creación y manipulación de documentos PDF. Apache PDFBox también incluye varias utilidades de línea de comandos. Apache PDFBox se publica bajo la licencia Apache v2.0.

logo azul

Entre las características de Apache PDFBox tenemos:

  • Extraer texto Unicode de archivos PDF.
  • Divide un documento PDF en muchos archivos o a la inversa, combina varios archivos PDF en uno solo.
  • Extrae datos de formularios PDF o rellena un formulario PDF.
  • Valida los archivos PDF según el estándar PDF/A-1b.
  • Imprime archivos PDF utilizando la API de impresión estándar de Java.
  • Guarda archivos PDF como archivos de imagen, como PNG o JPEG.
  • Crea documentos PDF desde cero, con fuentes e imágenes incrustadas.
  • Firmar digitalmente archivos PDF.

Pues bien, de las muchas características que posee esta librería, a continuación mostraremos algunos ejemplos prácticos, para eso utilizaremos un documento PDF que contiene imágenes y texto como el que se a continuación

I am Ironman

Tu puedes usar algún archivo PDF que tengas pero recomendamos que tenga 1 o 2 paginas, más paginas obviamente requiere de más tiempo de procesamiento.

Extracción de texto

import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.pdfbox.pdmodel.PDDocument;

public class Main {

    public static void main(String[] args) {

        try (PDDocument document = PDDocument.load(new File("documento.pdf"))) {
            PDFTextStripper textStripper = new PDFTextStripper();
            textStripper.setSortByPosition(true);
            String texto = textStripper.getText(document);
            System.out.println(texto);
        } catch (IOException ex) {
            System.err.println(ex.getMessage());
        }

    }
}

extracción de texto

Extracción de imágenes

import java.util.Date;
import javax.imageio.ImageIO;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageTree;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.graphics.PDXObject;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;

public class Main {

    public static void main(String[] args) {

        try (PDDocument document = PDDocument.load(new File("documento.pdf"))) {
            PDPageTree pages = document.getPages();
            for (PDPage pdfpage : pages) {
                PDResources pdResources = pdfpage.getResources();
                for (COSName cname : pdResources.getXObjectNames()) {
                    PDXObject object = pdResources.getXObject(cname);
                    if (object instanceof PDImageXObject) {
                        Date date = new Date();
                        File file = new File(date.getTime() + ".png");
                        System.out.println("Archivo extraido : " + file.getName());
                        ImageIO.write(((PDImageXObject) object).getImage(), "png", file);
                    }
                }
            }
        } catch (IOException ex) {
            System.err.println(ex.getMessage());
        }

    }
}

Exportar como PNG

Exportar PDF como imagen PNG

import java.io.File;
import javax.imageio.ImageIO;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;

public class Main {

    public static void main(String[] args) {

        try (PDDocument documento = PDDocument.load(new File("documento.pdf"))) {
            PDFRenderer pdfRenderer = new PDFRenderer(documento);
            //recorre todas las paginas
            for (int page = 0; page < documento.getNumberOfPages(); page++) {
                //Numero de pagina, escala, tipo de imagen
                BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 50, ImageType.RGB);
                //Se guarda en disco
                File file = new File("imagen_" + page + ".png");
                ImageIO.write(bim, "png", file);
            }
            documento.close();
        } catch (IOException ex) {
            System.err.println(ex);
        }
    }
}

render PDF

Encriptar documento PDF

El cifrado de documentos PDF requiere dos contraseñas:

  • Contraseña de usuario: Para abrir y ver el archivo con permisos restringidos
  • Contraseña de propietario:  para acceder al archivo con todos los permisos
import java.io.IOException;
import java.io.File;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.encryption.AccessPermission;
import org.apache.pdfbox.pdmodel.encryption.StandardProtectionPolicy;

public class Main {

    public static void main(String[] args) {
         
        try (PDDocument doc = PDDocument.load(new File("documento.pdf"))) {
            //Definir la longitud de la clave de cifrado.
            //Los valores posibles son 40 o 128 (256 estarán disponibles en PDFBox 2.0).
            int keyLength = 128;
            AccessPermission ap = new AccessPermission();
            // Desabilita
            ap.setCanPrint(false); //impresion
            ap.setCanModify(false); // modificacion
            ap.setCanExtractContent(false);//extraccion de informacacion
            //contraseña para usuario y propietario sera el mismo "123456"
            StandardProtectionPolicy spp = new StandardProtectionPolicy("123456", "123456", ap);
            spp.setEncryptionKeyLength(keyLength);
            spp.setPermissions(ap);
            doc.protect(spp);
            doc.save("documento-encriptado.pdf");
            doc.close();
            System.out.println("Documento encriptado");
        } catch (IOException ex) {
            System.err.println(ex.getMessage());
        }
    }
}

En cuanto intentemos abrir el documento PDF, nos solicitara nuestra contraseña

Permisos de Acceso

Y si utilizamos el primer código de este post para extraer texto del documento encriptado, obtendremos esta excepción.

PDF encriptado

enjoy!!!

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Formulario de login personalizado

Formulario de login personalizado

Hola, en este oportunidad dejo a disposición un formulario de logueo que se me ocurrió de repente creo inspirado en las...

Botón en java de Windows 8 Modern UI

Botón en java de Windows 8 Modern UI

En este tutorial crearemos un botón con el estilo del nuevo windows 8 Modern UI que primero se conoció como Metro UI.  E...

Interfaces Funcionales

Interfaces Funcionales

Una Interface Funcional es una interface que contiene uno y solo un método abstracto aunque puede contener métodos por d...

GraphADT: Clases para trabajar con grafos en java

GraphADT: Clases para trabajar con grafos en java

GraphADT es una proyecto alojado en github escrito en java que te permite trabajar con grafos, a la fecha de escribir es...

Formulario de autenticación circular

Formulario de autenticación circular

En este tutorial crearemos un formulario de logueo de forma circular usando el lenguaje java y el IDE de Netbeans. Neces...

“Hola Mundo” con Android Studio y Kotlin

“Hola Mundo” con Android Studio y Kotlin

Kotlin es un lenguaje de programación relativamente nuevo que ha ido ganando terreno en el desarrollo de aplicaciones pa...

Comparte lo que sabes

Categorias

Últimas entradas

Lorca Editor es una aplicación online creada por el desarrollador español Domingo Martin el cual tiene como objetivo el...

Eratóstenes era un matemático griego del siglo  III a.C. el cual ideó una manera rápida de obtener todos los números pri...

Las matemáticas son fundamentales para la vida y aparte de las actividades clásicas de enseñanza desarrolladas en el aul...

MVC es un patrón de arquitectura de software que separa una aplicación en tres componentes lógicos principales.  Estos s...

Herramientas

Generador de Enlaces a Whatsapp