Cree y lea PDF en Java utilizando la biblioteca iText

Mohd Mohtashim Nawaz 16 febrero 2024
  1. PDF y bibliotecas para trabajar con archivos PDF
  2. Características de la biblioteca iText
  3. Pasos para instalar la biblioteca iText en Eclipse
  4. Pasos para crear un archivo PDF utilizando la biblioteca iText en Java
  5. Pasos para leer el archivo PDF utilizando la biblioteca iText en Java
Cree y lea PDF en Java utilizando la biblioteca iText

La biblioteca iText es una biblioteca de código abierto para crear, manipular y leer archivos PDF en Java. Este artículo trata sobre la biblioteca iText, su instalación en Eclipse y la creación y lectura de archivos PDF en Java usando la biblioteca iText.

PDF y bibliotecas para trabajar con archivos PDF

El formato de documento portátil (PDF) es un formato de intercambio de datos muy utilizado mediante archivos. El PDF es independiente del hardware, el sistema operativo y el software.

Por lo tanto, es muy popular y se usa a menudo para texto, imágenes y otros tipos de datos.

Muchas bibliotecas están disponibles para crear, leer y trabajar con archivos PDF. Algunas de estas bibliotecas se dan a continuación.

  1. iText: la versión comunitaria de iText es una biblioteca de código abierto. Lee, crea y manipula los archivos PDF utilizando Java.

    Tiene una estructura jerárquica y puede ejecutar archivos PDF arbitrariamente complejos para generar los resultados deseados. La biblioteca iText está disponible en Java y .NET.

  2. Biblioteca Adobe PDF - Adobe desarrolló esta biblioteca para crear, manipular y leer archivos PDF. Podemos usar esta biblioteca para imprimir el pdf también.

    Esta biblioteca funciona con diferentes lenguajes como C++, Java y .NET.

  3. PDFBox - Esta es otra biblioteca de código abierto. Apache desarrolló esta biblioteca para crear, editar y ver archivos PDF y se puede usar con Java.

  4. Jasper Reports: esta herramienta de informes puede generar informes en archivos PDF.

Características de la biblioteca iText

Veamos algunas de las funciones de la biblioteca iText.

  1. Creación de archivos PDF: podemos crear archivos PDF arbitrariamente complejos e interactivos utilizando la biblioteca iText. También podemos insertar imágenes en el archivo PDF.
  2. Podemos crear marcadores, agregar números de página y agregar marcas de agua al archivo PDF utilizando la biblioteca iText.
  3. Podemos realizar operaciones de división y combinación en los archivos PDF.
  4. La biblioteca iText ofrece la posibilidad de trabajar con formularios interactivos en archivos PDF.
  5. Podemos guardar un archivo PDF como imagen en diferentes formatos como JPG, PNG, etc.

Pasos para instalar la biblioteca iText en Eclipse

La biblioteca iText es un software de código abierto de terceros que debe instalarse por separado en su proyecto Java antes de usarlo. Este artículo lo guía a través de los pasos de instalación de iText en Eclipse.

Eclipse es uno de los IDE más populares utilizados para el desarrollo de aplicaciones en Java. Este artículo asume que ya ha instalado Java y Eclipse.

Incluso si trabaja en cualquier otro IDE, el proceso de instalación es similar.

Veamos los pasos para agregar la biblioteca iText a su proyecto Eclipse.

  • Crear un proyecto en Eclipse (Archivo -> Nuevo -> Proyecto Java).
  • Haga clic derecho en el proyecto, aparece un menú desplegable.
  • Haga clic en Convertir a Proyecto Maven.
  • Observarás que aparece un nuevo archivo llamado pom.xml en la carpeta de tu proyecto.
  • Abra el pom.xml y agregue las siguientes dependencias dentro de la etiqueta <project> y después de la etiqueta <build>.
    <dependencies>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>barcodes</artifactId>
    	<version>7.2.1</version>
    	<!-- barcodes depends on kernel -->
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>font-asian</artifactId>
    	<version>7.2.1</version>
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>forms</artifactId>
    	<version>7.2.1</version>
    	<!-- forms depends on kernel and layout -->
      </dependency>
    
      <dependency>
    	  <groupId>com.itextpdf</groupId>
    	  <artifactId>hyph</artifactId>
    	  <version>7.2.1</version>
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>io</artifactId>
    	<version>7.2.1</version>
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>kernel</artifactId>
    	<version>7.2.1</version>
    	<!-- kernel depends on io -->
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>layout</artifactId>
    	<version>7.2.1</version>
    	<!-- layout depends on kernel -->
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>pdfa</artifactId>
    	<version>7.2.1</version>
    	<!-- pdfa depends on kernel -->
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>sign</artifactId>
    	<version>7.2.1</version>
    	<!-- sign depends on kernel, layout and forms -->
      </dependency>
    
    	<dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>commons</artifactId>
    	<version>7.2.1</version>
    	<!-- sign depends on kernel, layout and forms -->
      </dependency>
    
      <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>styled-xml-parser</artifactId>
    	<version>7.2.1</version>
    	<!-- sign depends on kernel, layout and forms -->
      </dependency>
    
    <dependency>
    	<groupId>com.itextpdf</groupId>
    	<artifactId>svg</artifactId>
    	<version>7.2.1</version>
    	<!-- sign depends on kernel, layout and forms -->
      </dependency>
    
    <dependency>
    	<groupId>org.apache.logging.log4j</groupId>
    	<artifactId>log4j-api</artifactId>
    	<version>2.13.3</version>
    </dependency>
    
    <dependency>
    	<groupId>org.apache.logging.log4j</groupId>
    	<artifactId>log4j-core</artifactId>
    	<version>2.13.3</version>
    </dependency>
    
    <dependency>
    	<groupId>org.apache.logging.log4j</groupId>
    	<artifactId>log4j-slf4j-impl</artifactId>
    	<version>2.13.3</version>
    </dependency>
    
    </dependencies>
    

    Tenga en cuenta que el proyecto utiliza la última versión (7.2.1) de la biblioteca iText al escribir. Puede actualizar a las versiones más nuevas si están disponibles.

  • Vaya a Archivo en la barra de menú y haga clic en Actualizar.

Esto importará las bibliotecas necesarias al proyecto. Debe tener una conexión a Internet estable ya que las bibliotecas se descargan del repositorio de maven.

Pasos para crear un archivo PDF utilizando la biblioteca iText en Java

Una vez que las bibliotecas están instaladas, puede usar la biblioteca iText para crear archivos pdf usando el programa Java.

La biblioteca iText tiene una clase llamada PdfWriter que crea un nuevo archivo pdf para escribir en él. Una vez que el archivo está abierto, agrega texto, imagen, etc.

Comprendamos los pasos para crear un archivo pdf y agregarle texto e imagen.

  1. Cree una instancia de la clase PdfWriter pasando el nombre del archivo como parámetro al constructor.
  2. Proceda a crear una instancia de la clase PdfDocument pasando la clase PdfWriter al constructor. Esta clase es responsable de escribir en el archivo pdf.
  3. Finalmente, deberá crear una instancia de clase Document. Se adjunta a la instancia de la clase PdfDocument.

Esta clase se utiliza para adjuntar elementos individuales al archivo pdf.

  1. En este momento, está listo para escribir texto e imágenes en el archivo pdf.

Pasos para escribir el texto en el archivo PDF en Java usando la biblioteca iText

Veamos los pasos para escribir un texto en el archivo.

  1. Se utiliza una clase Paragraph para escribir el texto en el pdf. Por lo tanto, debe crear una instancia de la clase Paragraph.
  2. Puede agregar el texto llamando al método add().
  3. Puede cambiar la apariencia del texto llamando a diferentes métodos como setTextAlignment(), setFont(), etc.
  4. Finalmente, agrega la instancia de párrafo a la instancia de Documento llamando al método add().

Finalmente, cuando haya agregado todas las instancias al documento, debe cerrarlo llamando al método close() de la clase Documento.

Ejemplo de código para crear PDF en Java utilizando la biblioteca iText

import com.itextpdf.io.font.constants.StandardFonts;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.parser.PdfTextExtractor;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.properties.TextAlignment;
import java.io.IOException;

public class pdfExample {
  public static void main(String[] args) {
    String file = "sample_pdf.pdf";
    try {
      createPdf(file);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  private static void createPdf(String file) throws IOException {
    PdfWriter writer = new PdfWriter(file);
    PdfDocument pdfDoc = new PdfDocument(writer);
    Document doc = new Document(pdfDoc);

    PdfFont myFont = PdfFontFactory.createFont(StandardFonts.TIMES_ROMAN);

    Paragraph p1 = new Paragraph();
    p1.add("Hello, This is Delftstack!");
    p1.setTextAlignment(TextAlignment.CENTER);
    p1.setFont(myFont);
    p1.setFontSize(28);
    doc.add(p1);

    Paragraph p2 = new Paragraph();
    p2.add("We help you understand the concepts.");
    p2.setFontSize(18);
    doc.add(p2);

    doc.close();
  }
}

El archivo pdf creado con el código anterior se muestra a continuación.

Archivo PDF creado

Pasos para leer el archivo PDF utilizando la biblioteca iText en Java

La biblioteca iText proporciona una clase PdfReader para leer un archivo pdf. El archivo pdf se puede leer siguiendo los pasos que se indican a continuación.

  1. Primero, debe crear una instancia de la clase PdfReader pasando la ruta del archivo al constructor.
  2. Cree una instancia de clase PdfDocument pasando la instancia de PdfReader al constructor.
  3. Si su archivo pdf contiene varias páginas, deberá recorrer cada página. Para obtener el número de páginas, puede invocar el método getNumberOfPages() utilizando la instancia de la clase PdfDocument.
  4. Recorra cada página.
    1. Invoque el método getTextFromPage() de la clase PdfTextExtractor pasando la página actual del documento.
    2. Para obtener la página actual, debe invocar el método getPage() de la clase Documento y pasar el número de página actual.
    3. El método getTextFromPage() es estático, por lo que no necesita una instancia de clase.
    4. El método devuelve todo el texto de la página actual. Puede almacenarlo en una variable String.
    5. Procese el texto (por ejemplo, muéstrelo en la consola).

Ejemplo de código para leer PDF en Java usando la biblioteca iText

import com.itextpdf.io.font.constants.StandardFonts;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.parser.PdfTextExtractor;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.properties.TextAlignment;
import java.io.IOException;

public class pdfExample {
  public static void main(String[] args) {
    String file = "sample_pdf.pdf";
    try {
      readpdf(file);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  private static void readpdf(String file) throws IOException {
    PdfReader pr = new PdfReader(file);
    PdfDocument doc = new PdfDocument(pr);
    int num = doc.getNumberOfPages();

    for (int i = 1; i <= num; i++) {
      String str = PdfTextExtractor.getTextFromPage(doc.getPage(i));
      System.out.println(str);
    }
  }
}

Producción :

Hello, This is Delftstack!
We help you understand the concepts.

Conclusión

Este artículo trata los aspectos básicos de la lectura y escritura del archivo pdf utilizando la biblioteca iText. Sin embargo, la biblioteca iText puede realizar operaciones complejas en el archivo pdf.

Para leer más sobre la biblioteca iText y sus funcionalidades, visite la documentación.

Artículo relacionado - Java PDF