iText - La clase Image - ¿Como agregar una imagen a un PDF? - ¿Como cambiarle el tamaño a una imagen con iText? - ¿Como rotar una imagen con iText?

Hola hace tiempo comencé esta sección de iText pero por fuerzas mayores no la puede continuar lo ultimo que vimos era como generar un tabla con iText, hoy vamos a ver imágenes en iText.

iText - La clase Image 


La clase Image (com.itextpdf.text.Image) es una clase abstracta, por lo cual como toda clase abstracta no se puede puede instanciar directamente, dicha clase se hereda de la clase Rectangle. Contiene todos los métodos necesarios para utilizar imágenes en iText.

Actualmente soporta muchos tipos diferentes de imágenes que luego ampliaremos, también es importante aclarar que para la manipulación de cada tipo de imagen tiene una clase relacionada en la cual contiene los métodos y propiedades necesarias para poder manipular la imagen.

iText - Image formatos Soportados

iText soporta los siguientes formatos de imagen:

iText - Image formatos Soportados
Formatos soportados por iText JPEG, JPEG2000, GIF, PNG, BMP, WMF, TIFF, y JBIG2

iText - Clases relacionadas a los tipos de Image

iText al soportar diferentes tipos de imágenes posee una clase por cada uno, para realizar un tratamiento particular de datos. Tabla de clases relacionadas a los tipos de Image.

iText - Clases relacionadas a los tipos de Image
Tabla comparativas de clases relacionadas con los diferentes tipos de imágenes.

iText - Image - ¿Como insertar una imagen con iText? - ¿Como agregar una imagen a un PDF?


Primero tenemos que obtener una instancia de la clase Image (com.itextpdf.text.Image) pero como es una clase abstracta debemos obtener una instancia mediante el método getInstance() pasandole por argumento la url/path de las imágenes, en nuestro caso "C:/Blog/Itext/images/00.jpg".

Image imagen = Image.getInstance("C:/Blog/Itext/images/00.jpg");

Finalmente tenemos que agregar esta imagen al documento:

documento.add(imagen);

Resultados:

iText - Image - ¿Como insertar una imagen con iText? - ¿Como agregar una imagen a un PDF?


Código completo:
package com.java.white.box.itext.images;
import java.io.FileOutputStream;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfWriter;

/**
* @author nconde
*/
public class Main {

/**
* @param args
*/
public static void main(String[] args) {

// Por defecto es A4
Document documento = new Document();
try {
// Obtenemos una instancia de un objeto PDFWriter
PdfWriter.getInstance(documento, new FileOutputStream("pba.pdf"));
documento.open();

// Obtenemos una instancia de un objeto Image
// pasandole por parametro la imagen.
Image imagen = Image.getInstance("C://Blog/Itext/images/00.jpg");

//Agregamos la imagen al documento.
documento.add(imagen);

documento.close();

} catch (DocumentException ex) {
// Atrapamos excepciones concernientes al documentoo.
} catch (java.io.IOException ex) {
// Atrapamos excepciones concernientes al I/O.
}
}
}

iText - ¿Como cambiarle el tamaño a una imagen con iText?

Para modificar el tamaño de la imagen se utilizan los siguientes métodos:

  • scaleAbsoluteWidth(): Recibe un float donde el mismo es el tamaño de ancho horizontal asignado a la imagen.   (Hablando de porcentaje)
  • scaleAbsoluteHeight(): Recibe un float donde el mismo es el tamaño de alto vertical asignado a la imagen.  (Hablando de porcentaje)
  • scalePercent(): Recibe un float donde el mismo es el porcentaje en el cual aplicara el ancho y alto de la imagen.
  • scaleToFit(): Recibe dos float, definir el máximo de las dimensiones de la imagen. Si la relación de anchura / altura difiere de la relación de aspecto de la imagen, ya sea el ancho o la altura, será menor que el correspondiente parámetro de este método.
  • scaleAbsolute: Tenemos 2 firmas una que recibe un solo float y otra que recibe dos float, escalar la imagen a un ancho absoluto y una altura absoluta.
Ya habiendo explicado los tipos de modificadores de tamaño de las imágenes comencemos.


Primero tenemos que obtener una instancia de la clase Image (com.itextpdf.text.Image) pero como es una clase abstracta debemos obtener una instancia mediante el método getInstance() pasandole por argumento la url/path de las imágenes, en nuestro caso "C:/Blog/Itext/images/00.jpg".

Image imagen = Image.getInstance("C:/Blog/Itext/images/00.jpg");

Ahora para darle un tamaño de 20 por ciento:

imagen.scaleAbsoluteWidth(20f);

Finalmente tenemos que agregar esta imagen al documento:

documento.add(imagen);

Resultados:
iText - ¿Como cambiarle el tamaño a una imagen con iText?

Código completo:

package com.java.white.box.itext.images;
import java.io.FileOutputStream;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfWriter;

/**
* @author usuario
*/
public class Main {

/**
* @param args
*/
public static void main(String[] args) {

// Por defecto es A4
Document documento = new Document();

try {
// Obtenemos una instancia de un objeto PDFWriter
PdfWriter.getInstance(documento, new FileOutputStream("Eje.pdf"));
documento.open();

// Obtenemos una instancia de un objeto Image
// pasandole por parametro la imagen.
Image imagen = Image.getInstance("C:/images/00.jpg");

//Asignamos un 20 porciento de ancho.
imagen.scaleAbsoluteWidth(20f);

//Agregamos la imagen al documento.
documento.add(imagen);

documento.close();

} catch (DocumentException ex) {
// Atrapamos excepciones concernientes al documentoo.
} catch (java.io.IOException ex) {
// Atrapamos excepciones concernientes al I/O.
}
}
}



iText - Image - ¿Como cambiar el borde de una imagen con iText?

Vamos a dar por sabido, ya que todos son lectores habituales de este blog  (???) que previamente han abierto ya el documento y han puesto el path del pdf si no es asi pasar por aca.

Primero tenemos que obtener una instancia de la clase Image (com.itextpdf.text.Image) pero como es una clase abstracta debemos obtener una instancia mediante el método getInstance() pasandole por argumento la url/path de las imágenes, en nuestro caso "C:/Blog/Itext/images/00.jpg".



Image imagen = Image.getInstance("C:/Blog/Itext/images/00.jpg");

Ahora vamos asignarle el tipo de borde, en nuestro caso sera el borde en todas sus cara es decir un rectángulo, para asignar el borde de utiliza el método setBorder():

imagen.setBorder(Image.BOX);

Luego asignamos el ancho del borde, con el método setBorderWidth():

imagen.setBorderWidth(10);

Luego para asignar el color se utiliza el método setBorderColor():

imagen.setBorderColor(BaseColor.RED);

Finalmente tenemos que agregar esta imagen al documento:

documento.add(imagen);

Resultados:


Código completo:

package com.java.white.box.itext.images;
import java.io.FileOutputStream;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfWriter;

/**
* @author nconde
*/
public class Main {

/**
* @param args
*/
public static void main(String[] args) {

// Por defecto es A4
Document documento = new Document();

try {
// Obtenemos una instancia de un objeto PDFWriter
PdfWriter.getInstance(documento, new FileOutputStream("Ej4.pdf"));
documento.open();

// Obtenemos una instancia de un objeto Image
// pasandole por parametro la imagen.
Image imagen = Image.getInstance("C:/images/00.jpg");

//Asignamos el tipo de borde
imagen.setBorder(Image.BOX);

//Asignamos el ancho del borde
imagen.setBorderWidth(10);

//Asignamos el color del borde
imagen.setBorderColor(BaseColor.RED);

//Agregamos la imagen al documento.
documento.add(imagen);

documento.close();

} catch (DocumentException ex) {
// Atrapamos excepciones concernientes al documentoo.
} catch (java.io.IOException ex) {
// Atrapamos excepciones concernientes al I/O.
}
}
}


iText - Image - ¿Como rotar una imagen con iText? 


Primero tenemos que obtener una instancia de la clase Image (com.itextpdf.text.Image) pero como es una clase abstracta debemos obtener una instancia mediante el método getInstance() pasandole por argumento la url/path de las imágenes, en nuestro caso "C:/Blog/Itext/images/00.jpg".

Image imagen = Image.getInstance("C:/Blog/Itext/images/00.jpg");

Ahora para rotar la imagen utilizaremos el metodo setRotationDegrees() el cual recibe un float, dicho método rotara la imagen en sentido contrario de las agujas del reloj, en nuestro ejemplo lo rotaremos 30 grados.

imagen.setRotationDegrees(30);

Finalmente tenemos que agregar esta imagen al documento:

documento.add(imagen);

Resultados:

iText - Image - ¿Como rotar una imagen con iText?


Código completo:
package com.java.white.box.itext.images;
import java.io.FileOutputStream;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfWriter;

/**
* @author nconde
*/
public class Main {

/**
* @param args
*/
public static void main(String[] args) {

// Por defecto es A4
Document documento = new Document();

try {
// Obtenemos una instancia de un objeto PDFWriter
PdfWriter.getInstance(documento, new FileOutputStream("Eje.pdf"));
documento.open();

// Obtenemos una instancia de un objeto Image
// pasandole por parametro la imagen.
Image imagen = Image.getInstance("C:/Blog/Itext/images/00.jpg");

//Asignamos una rotacion de 30 grados
imagen.setRotationDegrees(30);

//Agregamos la imagen al documento.
documento.add(imagen);

documento.close();

} catch (DocumentException ex) {
// Atrapamos excepciones concernientes al documentoo.
} catch (java.io.IOException ex) {
// Atrapamos excepciones concernientes al I/O.
}
}
}
iText - La clase Image - ¿Como agregar una imagen a un PDF? - ¿Como cambiarle el tamaño a una imagen con iText? - ¿Como rotar una imagen con iText? iText - La clase Image - ¿Como agregar una imagen a un PDF? - ¿Como cambiarle el tamaño a una imagen con iText? - ¿Como rotar una imagen con iText? Reviewed by El lado oscuro de java on junio 19, 2014 Rating: 5

18 comentarios:

  1. Hola amigo estuvo muy bueno, necesito una ayuda con respecto al pie de pagina y encabezado, te agradecería si me ayudaras con eso. Lo he buscado y toda la info que sale es en ingles y muy extensa. Te lo agradezco de antemano.

    ResponderEliminar
  2. Hola amigo... excelente esxplicacion... pero yo quiero saber... como puedo poner dos o mas imagenes empalmadas... es decir manejar cada imagen como una capa encima de otra capa...solo logro poner dos imagenes en la misma pagina pero no una encima de la otra...

    ResponderEliminar
    Respuestas
    1. Hola amigo, te explico en este link como realizar esto, mas adelante explicaremos en profundidad este tema, muchas gracias por pasar

      http://java-white-box.blogspot.com.ar/2015/03/itext-que-es-una-layermascaracapa-como.html

      Eliminar
  3. hola gracias por tu codigo pero no se porque no me resulta, no agrga la imagen

    ResponderEliminar
    Respuestas
    1. hola javiera, dime que problema te pasa leistes los pasos anteriores?

      Eliminar
  4. buenas tardes, como estan, tengo una duda al momento de generar mi .jar.

    la cuestion es que al emitir un reporte de cualquier tipo (tienen un encabezado como imagen), me arroja un error "error en documento.com.itextpdf.text.document.exception.java.lang.null.pointerexception", cual podria ser la solucion amigos?

    ResponderEliminar
  5. HOLA QUIERO CENTRAR EL TEXTO DE MI REPORTE COMO LE HAGO?

    ResponderEliminar
  6. Buenos dias, tengo la siguiente duda.
    Resulta que estoy leyendo un pdf para extraer las imágenes, pero resultado que al utilizar imageRenderInfo.getImage().getBufferedImage() este devuelve vacío pero curioso dado que solo me pasa con algunos pdf que genera un scanner en particular.
    Uno de HP. Cual podría ser el problema.

    ResponderEliminar
  7. Buenos dias, tengo la siguiente duda.
    Resulta que estoy leyendo un pdf para extraer las imágenes, pero resultado que al utilizar imageRenderInfo.getImage().getBufferedImage() este devuelve vacío pero curioso dado que solo me pasa con algunos pdf que genera un scanner en particular.
    Uno de HP. Cual podría ser el problema.

    ResponderEliminar
  8. Muchas gracias por la info... me fue de mucha ayuda...

    ResponderEliminar
  9. Buenos dias, excelente aporte amigo, una consulta, cómo agrego una imagen de fondo centrada en el documento? Saludos

    ResponderEliminar
  10. Holaa, Este codigo tambien lo puedo utilizar en Android?

    ResponderEliminar
  11. Buenas tardes, ejemplos muy prácticos y buenos, pero una consulta como puedo poner una imagen de fondo en varias paginas generadas del pdf.

    ResponderEliminar
  12. gran aporte e resuelto algunas problematicas con esa grandiosa libreria como es itext muy agradecido con este tutorial bien explicado ahora querria saber lo siguiente tengo ya pdfs generados queria saber como colocar una firma a los que ya estan generados o montar una imagen en los mismos

    ResponderEliminar
  13. buenas tardes:

    podrias ayudarme? como puedo poner una imagen y una tabla a la misma altura? imagen y al lado datos como folio, fecha, etc.
    saludos!!!!!

    ResponderEliminar
  14. El uso de imágenes y textos con las capas puede ser realmente potente.
    Una imagen de fondo, y luego añadir textos e imágenes en capas superiores

    ResponderEliminar

Con la tecnología de Blogger.