Agregar imágenes a una tabla en PDF usando Java

PDFBox es una biblioteca de código abierto que está escrita en Java. Ayuda en el desarrollo y conversión de documentos PDF. La biblioteca PDFBox viene en forma de archivo JAR . Puede crear nuevos documentos PDF, manipular documentos existentes, marcar el PDF y también extraer contenido de documentos PDF. Podemos usar esta biblioteca para la firma digital, imprimir y validar archivos contra el estándar PDF/A-1b . Viene con una serie de utilidades de línea de comandos para realizar varias operaciones en documentos PDF. Algunas utilidades cifran y descifran PDF, depuran, fusionan, superponen, convierten texto a PDF y PDF a una imagen. Algunos componentes de PDFBox son PDFBox, FontBox, XmpBox, PreFlight. PDFBoxes la parte principal de la biblioteca PDFBox. Ya que contiene clases e interfaces para la extracción de contenido y manipulación/modificación de archivos. FontBox contiene las clases e interfaces para manejar la información de la fuente. XmpBox contiene las clases e interfaces para manejar los metadatos XMP . PreFlight se utiliza para verificar los archivos PDF del estándar PDF/A-1B.

iText es una biblioteca Java de código abierto para crear y manipular archivos PDF en Java y .NET. Inicialmente, el código fuente se distribuía como código abierto bajo las licencias de código abierto Mozilla Public License o GNU Library General Public License. iText es compatible con las funciones de PDF más avanzadas, como firmas basadas en PKI, cifrado de 40 y 128 bits, corrección de color, PDF con etiquetas, formularios PDF (AcroForms), PDF/X, gestión de color a través de perfiles ICC y códigos de barras, y es utilizado por varios productos y servicios, incluidos Eclipse BIRT, Jasper Reports, JBoss Seam, Windward Reports y pdftk. iText proporciona al usuario clases (API) para generar documentos PDF interactivos. Por estos, podemos crear mapas y libros. Podemos agregar marcadores, números de página y marcas de agua. Podemos dividir un PDF existente en varios PDF y también podemos agregarle/concatenar páginas adicionales. Podemos llenar formularios interactivos en un documento PDF. Podemos guardar archivos PDF como archivos de imagen, como PNG o JPEG (JPG). La biblioteca iText nos proporciona una clase Canvas con la que podemos dibujar varias formas geométricas en un documento PDF como rectángulo, círculo, línea, etc. Con iText, se puede crear un nuevo archivo PDF desde sus programas Java. También podemos incluir imágenes y fuentes.

Configuración del entorno

  • Haz un proyecto usando Java Maven .
  • Vaya a pdfbox.apache.org y agregue la dependencia a su proyecto. Por esto, las bibliotecas se importan a su proyecto.
  • Ahora, cree una clase java en com.mycompany.<Your Project Name> en Source Packages.
  • Genial, ahora puedes usar las bibliotecas.

Conceptos de comprensión

Crear documento

Primero, creamos una instancia de la clase PDDocument que pertenece al paquete org.apache.pdfbox.pdmodel. Al obtener una instancia de la clase PDDocument, podemos crear un documento PDF vacío.

PDDocument doc = new PDDocument();   

Crear página en blanco

La clase PDPage se utiliza para crear una página en blanco en un documento PDF. El siguiente código crea una página en nuestro documento PDF.

PDPage blankPage = new PDPage();  

Añadir página

El método addPage() se usa para agregar páginas en el documento PDF. El siguiente código agrega una página en nuestro documento PDF.

doc.addPage( blankPage );  

Guardar documento

Cuando creamos un documento, tenemos que guardar el documento en la ubicación deseada. Entonces, usamos el método save() para guardar el documento. El método save() acepta un valor de string y pasa una ruta del documento como parámetro.

doc.save("Path of Document");  

Cerrar documento

Necesitamos cerrar el objeto de la clase PDDocument después de completar la tarea, usando el método close() 

doc.close();  

Ejemplo: 

Java

// Importing the required library functions
  
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.graphics.*;
import org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg;
  
public class image_insert {
    public static void main(String[] args)
        throws FileNotFoundException, IOException,
               COSVisitorException
    {
        // Create a pdfdocument object
        PDDocument doc = new PDDocument();
  
        // Create a PDPage  object
        PDPage page = new PDPage();
  
        // Add page to document object
        doc.addPage(page);
  
        // Create FileInputStream object for your image
        FileInputStream in
            = new FileInputStream("D:/Downloads/abc1.jpg");
        PDJpeg img = new PDJpeg(doc, in);
        PDPageContentStream stream
            = new PDPageContentStream(doc, page);
  
        // Invoke drawXObject() object to draw image onto
        // pdf file.
        stream.drawXObject(img, 200, 220, 220, 200);
        // First two integers are x and y
        // coordinates(position of image) Second two
        // integers are width and height of the image
  
        stream.close();
        doc.save("D:/My_pdf1");
        doc.close();
    }
}

Producción:

cd D:\NetBeansProjects\ImagePdf; “JAVA_HOME=C:\\Archivos de programa\\Java\\jdk-14.0.2” cmd /c “\”C:\\Archivos de programa\\NetBeans-12.0\\netbeans\\java\\maven\\bin\ \mvn.cmd\” -Dexec.args=\”-classpath %classpath com.mycompany.imagepdf.image_insert\” -Dexec.executable=\”C:\\Archivos de programa\\Java\\jdk-14.0.2\ \bin\\java.exe\” -Dexec.classpathScope=runtime -Dmaven.ext.class.path=\”C:\\Archivos de programa\\NetBeans-12.0\\netbeans\\java\\maven-nblib\\ netbeans-eventspy.jar\” -Dfile.encoding=UTF-8 org.codehaus.mojo:exec-maven-plugin:1.5.0:exec”

Ejecución de NetBeans Compile On Save. Se omite la ejecución de la fase y se utilizarán los directorios de salida de los proyectos de dependencia (con Compilar al guardar activado) en lugar de sus artefactos jar.

Buscando proyectos…

———————–< com.miempresa:ImagePdf >———————–

Construyendo ImagePdf 1.0-INSTANTÁNEA

———–[ frasco ]———–

— exec-maven-plugin:1.5.0:exec (predeterminado-cli) @ ImagePdf —

—————————————————————————

CONSTRUYE EL ÉXITO

—————————————————————————

Tiempo total: 1.372 s

Finalizado el: 2020-10-31T23:31:58+05:30

—————————————————————————

Si obtiene un resultado similar, significa que el código se ha ejecutado correctamente.

Insert jpg images to pdf

Nota: con la ayuda del código anterior, solo puede insertar imágenes jpg en un PDF.

Agregar imágenes usando PDFBox

1. Haz un proyecto usando Java Maven .

2 . Edite el archivo pom.xml que se puede encontrar en Archivos de proyecto. Debe agregar la parte en negrita como se muestra a continuación.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>Itextt</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>14</maven.compiler.source>
        <maven.compiler.target>14</maven.compiler.target>
    </properties>
<dependencies>

    <dependency>

        <groupId>com.itextpdf</groupId>

        <artifactId>itext7-core</artifactId>

        <version>7.1.10</version>

        <type>pom</type>

    </dependency>

</dependencies>

</project>






3. Ahora simplemente ejecútelo y podrá observar que todos los archivos jar se instalarán automáticamente.

Conceptos de comprensión

Crear un objeto PdfWriter

La clase PdfWriter representa el DocWriter de un PDF que pertenece al paquete com.itextpdf.kernel.pdf. El constructor toma como entrada una string que representa la ruta del archivo donde se creará el PDF. Luego, inicialice la clase PdfWriter pasando un valor de string (que representa la ruta donde necesitamos crear un PDF) a su constructor, como se muestra a continuación.

String destination = "D:/Downloads/My_pdf.pdf";  
PdfWriter writer = new PdfWriter(destination);

Cuando un objeto de este tipo se pasa a una clase PdfDocument, cada elemento agregado a este documento se escribirá en el archivo especificado.

Creando un objeto PdfDocument

La clase PdfDocument es la clase que representa el documento PDF en iText. Esta clase pertenece al paquete com.itextpdf.kernel.pdf. Para inicializar esta clase (en modo escritura), necesitamos pasar un objeto de la clase PdfWriter a su constructor.

Inicialice la clase PdfDocument pasando el objeto PdfWriter creado anteriormente a su constructor, como se muestra a continuación.

PdfDocument pdfdocument= new PdfDocument(writer);  

Cuando se crea un objeto PdfDocument, se pueden agregar varios elementos como una página, un archivo adjunto, una fuente y un controlador de eventos utilizando los métodos respectivos proporcionados por su clase.

Crear el objeto Documento

Al crear un PDF autosuficiente, el elemento raíz es la clase Documento del paquete com.itextpdf.layout. Uno de los constructores de la clase toma un objeto de la clase PdfDocument. Inicialice la clase Document pasando el objeto de la clase PdfDocument creado en los pasos anteriores, como se muestra a continuación.

Document document = new Document(pdfdocument);  

Creación de un objeto de imagen

Para crear el objeto de imagen, en primer lugar, creamos un objeto ImageData usando el método create() de la clase ImageDataFactory. Luego, pasamos un parámetro de string que representa la ruta de la imagen como parámetro de este método.

String imgFile = "D:/img.jpg";  
ImageData data = ImageDataFactory.create(imgFile);

Ahora, inicialice la clase Imagen del paquete com.itextpdf.layout.element. Al instanciar, pasamos el objeto ImageData creado anteriormente como un parámetro a su constructor, como se muestra

Image img = new Image(data);  

Agregar una imagen al documento

Podemos agregar el objeto de imagen creado en el último paso usando el método add() de la clase Document.

document.add(img);

Cerrar el documento

Necesitamos cerrar el documento usando el método close() de la clase Document

document.close(); 

Ejemplo:

Java

// Adding image to pdf
  
import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Image;
  
public class Itext_final {
    public static void main(String args[]) throws Exception
    {
  
        // Creating a PdfWriter
        PdfWriter writer = new PdfWriter("D:/mypdf1.pdf");
  
        // Creating a PdfDocument
        PdfDocument pdf = new PdfDocument(writer);
  
        // Creating a Document
        Document document = new Document(pdf);
  
        // Creating an ImageData object
        ImageData data = ImageDataFactory.create(
            "D:/Downloads/Image.png");
  
        // Creating an Image object
        Image image = new Image(data);
  
        // Adding image to the document
        document.add(image);
  
        // Closing the document
        document.close();
  
        System.out.println("Image added successfully!!");
    }
}

Producción

Image added successfully!!

Insert image to a pdf

NOTA: En este método, podemos agregar imágenes en formato PNG, así como en formato jpg, lo cual es una ventaja sobre la biblioteca PDFBox.

Publicación traducida automáticamente

Artículo escrito por chaitanyakapre 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 *