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.
Entre las características de Apache PDFBox tenemos:
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
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 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 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); } } }
Encriptar documento PDF
El cifrado de documentos PDF requiere dos contraseñas:
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
Y si utilizamos el primer código de este post para extraer texto del documento encriptado, obtendremos esta excepción.
enjoy!!!
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! :)
Control de versiones: Se llama control de versiones a la gestión de los diversos cambios que se realizan sobre los eleme...
Realizar pruebas sobre nuestro código nos permiten comprobar su correcto funcionamiento e integración con otros módulos...
Es recomendable tener actualizado la Maquina Virtual Java de nuestro equipo para poder disfrutar de las mejoras que trae...
Este 2019 se implementara en Bolivia un nuevo Sistema de Facturación Electrónica con nuevas características y medidas de...
El cifrado francmasón es un cifrado por sustitución simple que cambia las letras por símbolos. Sin embargo, el uso de sí...
Este 12 de Mayo de 2017 se produjo un ataque masivo mundial del ransomware WannaCry el que afecto a más de 200000 comp...
Por lo general se usan transacciones a nivel base de datos y posteriormente se llaman estos a través de procedimientos a...
En este post, aprenderemos como conectar Visual Basic 6 con SQL Server, abrir una tabla, leer su contenido y mostrar est...
Lo que veremos en este post es la configuración del driver para PHP de SQL Server que ha creado Microsoft el cual permit...
Google Bard la inteligencia artificial de Google se actualiza con una mejora que entra a competir con el resto de IAs y...