style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Aportación JavaMéxico - PCJ - Colocar marca de agua a una imágen (PDF)

Que tal, aqui le dejo un ejemplo de como podemos generar un archivo PDF a partir de una imágen, además de colocarle un texto estilo "marca de agua", utilizando la libreria Itext (1.4.8). Esto lo utilice en un proyecto donde de acuerdo a los perfiles de cada usuario, por seguridad podian ver documentacion con o sin marca de agua.

Les dejo comentarios sobre el código.

Este es el método principal donde se genera el PDF.

public void generarMarcaAgua(){
        //Indicamos la ruta de la imagen
        String rutaImagen = "c:\\imagen.tif";

        //Se crea el documento
        Document document = new Document();
       
        try {
            //Se crea un writer de la clase PdfWriter para generar el PDF
            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("c:\\imagen.pdf"));

            document.open();
           
            document.setPageSize(PageSize.LETTER);
           
            //Se manda llamar el método que coloca la imágen en el PDF
            poneImagen(document, rutaImagen)
            //Se manda llamar el método que coloca el texto "marca de agua", en el PDF
            poneSelloAgua(writer);

            document.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Este método coloca la imágen en el PDF

 private static void poneImagen(Document document, String archivo) {
        RandomAccessFileOrArray ra = null;
        boolean resultado = false;
        try {
            ra = new RandomAccessFileOrArray(archivo ,true);
            Image img = TiffImage.getTiffImage(ra, 1);
            if (img != null) {
                //Se valida la escala de la imágen
                if (img.scaledWidth() > 600 || img.scaledHeight() > 800) {
                    //Se reduce la escala de la imágen    
                    img.scaleToFit(615, 825);
                }
                //Se indica la posicion donde se colocara la imágen en el PDF
                img.setAbsolutePosition(0, 0);
                //Se inserta la imágen en el PDF
                document.add(img);              
            }
            ra.close();
        }
        catch (Exception e) {
            System.out.println("Error al agregar imagen al PDF " + e.getMessage());
        }      
    }

Finalmente, este método coloca el texto de marca de agua al PDF.

       private static void poneSelloAgua(PdfWriter writer) {
           try {

               PdfContentByte cb = writer.getDirectContent();
               //Se crea un templete para asignar la marca de agua
               PdfTemplate template = cb.createTemplate(700, 300);

               template.beginText();
               //Inicializamos los valores para el templete
               //Se define el tipo de letra, color y tamaño
               BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
               template.setColorFill(new Color(220, 220, 220));
               template.setFontAndSize(bf, 6);
               
               template.setTextMatrix(0, 0);
               //Se define el texto que se agregara como marca de agua
               template.showText("TEXTO MARCA AGUA");
               template.endText();

               //Se asigna el templete
               //Se asignan los valores para el texto de marca de agua
               // Se asigna el grado de inclinacion y la posicion donde aparecerá el texto
               //                                                     x    y
               cb.addTemplate(template, 1, 1, -1,1, 50, 500);

           }
           catch (Exception e) {
               e.printStackTrace();
           }
       }

Saludos.
RVP.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

PCJ?

Esto es para concursar en el PCJ? le faltó eso al título (pero dice Aportación JavaMéxico por eso pregunto si va a ser para lo de PCJ)

Si es para PCJ

Asi es, por error omiti lo de PCJ, pero si es para el concurso.

Saludos.

Imagen de rugi

Una imagen PNG

¿Haz logrado tener un pdf con texto, y por otro lado una imagen PNG transparente y colocarla encima manteniendo la transparencia?

Es igual?....
Si me das una respuesta ... mi voto es tuyo ;)

Gracias por la aportación a la comunidad, esperamos no sea la última.... itext tiene mucha tela de donde cortar

Saludos

RuGI

Ahh se puede votar?...

Ahh se puede votar?...

Seeee, rivilla: screenshot o nunca paso

Re: Una imagen PNG

Que tal RuGI,

No se ti te entendi bien, pero a ver si esto resuelve tu duda:

Teniendo el archivo PDF, inserto la imagen a través de un PdfContentByte
con esto se respeta las secciones que la imágen tiene transparentes.

            Document document = new Document();
           //Se crea un reader para el PDF
            PdfReader reader = new PdfReader("/origen.pdf");
            //obtenemos el número de páginas del archivo
            int total = reader.getNumberOfPages();
           
            PdfWriter pdfwriter = PdfWriter.getInstance(document, new FileOutputStream("/destino.pdf"));
            PdfImportedPage pdfimportedpage = null;
            Image image = Image.getInstance("/imagen.png");
            document.open();

            //Declaro el PdfContentByte obteniendo el Direct Content del PDF.
            PdfContentByte pdfcontentbyte = pdfwriter.getDirectContent();
            for(int j = 1; j <= total; j++)
            {
                //Se agregan las paginas al documento PDF
                document.newPage();
               
                pdfimportedpage = pdfwriter.getImportedPage(reader, j);
                pdfcontentbyte.addTemplate(pdfimportedpage, 1.0F, 0.0F, 0.0F, 1.0F, 0.0F, -10F);
                //Se asigna la posición de la imágen
                image.setAbsolutePosition(100,100);
                //Se asigna la imágen al PDF
                pdfcontentbyte.addImage(image);
            }
            document.close();

Saludos.

Imagen de Jhanno

Revisado

Un muy buen aporte... Esperamos seguir contando contigo en los foros de esta comunidad.

Marka de Agua

Tengo un problema cree un documento con marka de agua, en el documento tendo tablas con estilos pero al momento de que se construye el pdf la imagen se antepone por ensima de los bordes y los estilos de las tablas pero no de la letra,

podras ayudarme

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">