Breaking

Post Top Ad

Your Ad Spot

viernes, 14 de junio de 2019

Trabajar con archivos PDF en Python: agregar imágenes y marcas de agua

Este artículo es el segundo de una serie sobre el trabajo con archivos PDF en Python:
  • Leer y dividir páginas
  • Añadiendo imágenes y marcas de agua ( estas aquí )
  • Inserción, eliminación y reordenamiento de páginas

Introducción

Hoy en día, un mundo sin el Formato de Documento Portátil (PDF) parece ser impensable. Se ha convertido en uno de los formatos de datos más utilizados. Hasta la versión 1.4 de PDF, mostrar un documento PDF en un visor de PDF correspondiente funciona bien. Desafortunadamente, las funciones de las revisiones de PDF más recientes, como los formularios, son difíciles de implementar y aún requieren más trabajo para ser completamente funcionales en las herramientas. Usando varias bibliotecas de Python, puede crear su propia aplicación de una manera comparable y fácil.
Este artículo es la segunda parte de una pequeña serie en archivos PDF con Python. En la primera parte ya le dimos una introducción a la lectura de documentos PDF usando Python, y comenzamos con un resumen de las diferentes bibliotecas de Python. Siguió una introducción que mostraba cómo manipular los archivos PDF existentes y cómo leer y extraer el contenido, tanto el texto como las imágenes. Además, le mostramos cómo dividir documentos en sus páginas individuales.
En este artículo, aprenderá cómo agregar imágenes a su PDF en forma de marcas de agua, sellos y códigos de barras. Por ejemplo, esto es muy útil para sellar o marcar documentos que están destinados a ser leídos solo por un público específico, o tienen un borrador de calidad, o simplemente para agregar un código de barras con fines de identificación.

Agregar una marca de agua a través de la línea de comandos con pdftk

Para agregar una marca de agua a un PDF existente en una línea de comandos de Unix / Linux podemos usar pdftk . El nombre abrevia "PDF Toolkit", y se describe a sí mismo como "una herramienta simple para hacer cosas cotidianas con documentos PDF". pdftkse ha portado a Java y se ha puesto a disposición como un paquete de acuerdo para Debian GNU / Linux.
Para que esto funcione, debe tener disponible una imagen de fondo que viene con la palabra "BORRADOR" en una capa transparente, que puede aplicar a un PDF de una página existente de la siguiente manera:
$ pdftk input.pdf background background.pdf output output.pdf
La pdftkherramienta toma el archivo PDF input.pdf, lo fusiona background.pdfy envía el resultado al archivo output.pdfLa figura 1 muestra el resultado de esta acción.
Agregar una marca de agua a un PDF existente
Para acciones más complejas, como estampar un documento con diferentes sellos por página, eche un vistazo a la descripción en la página del proyecto PDF Labs También mostramos el caso de uso de estampado en este artículo a continuación, aunque nuestro ejemplo usa la biblioteca en pdfrwlugar de pdftk.

Añadiendo una marca de agua con PyPDF2

La biblioteca PyPDF proporciona un método llamado mergepage()que acepta otro PDF para ser usado como marca de agua o sello.
En el siguiente ejemplo, comenzamos con la lectura de la primera página del documento PDF original y la marca de agua. Para leer el archivo usamos la PdfFileReader()clase. Como segundo paso, combinamos las dos páginas utilizando el mergepage()método. Finalmente, escribiremos la salida al archivo de salida. Esto se hace en tres pasos: crear un objeto basado en la PdfFileWriter()clase, agregar la página combinada a este objeto usando el addPage()método y escribir el nuevo contenido en la página de salida usando el write()método.
Agregar una marca de agua a un PDF existente mediante PyPDF
# !/usr/bin/python
# Adding a watermark to a single-page PDF

import PyPDF2

input_file = "example.pdf"  
output_file = "example-drafted.pdf"  
watermark_file = "draft.pdf"

with open(input_file, "rb") as filehandle_input:  
    # read content of the original file
    pdf = PyPDF2.PdfFileReader(filehandle_input)

    with open(watermark_file, "rb") as filehandle_watermark:
        # read content of the watermark
        watermark = PyPDF2.PdfFileReader(filehandle_watermark)

        # get first page of the original PDF
        first_page = pdf.getPage(0)

        # get first page of the watermark PDF
        first_page_watermark = watermark.getPage(0)

        # merge the two pages
        first_page.mergePage(first_page_watermark)

        # create a pdf writer object for the output file
        pdf_writer = PyPDF2.PdfFileWriter()

        # add page
        pdf_writer.addPage(first_page)

        with open(output_file, "wb") as filehandle_output:
            # write the watermarked file to the new file
            pdf_writer.write(filehandle_output)

Añadiendo una imagen con PyMuPDF

PyMuPDF son los enlaces de Python para MuPDF, que es un visor de PDF y XPS ligero. En su secuencia de comandos de Python, el módulo que necesita ser importado tiene un nombre fitz, y este nombre vuelve al nombre anterior de PyMuPDF.
Para esta sección vamos a mostrar cómo agregar una imagen usando un código de barras como ejemplo, ya que esta es una tarea bastante común. Aunque se pueden aplicar los mismos pasos para agregar cualquier tipo de imagen a un PDF.
Para decorar un documento PDF con un código de barras, simplemente agregamos una imagen como otra capa de PDF en la posición deseada. En cuanto a los formatos de imagen, PyMuPDF acepta PNG o JPEG, pero no SVG.
La posición de la imagen se define como un rectángulo mediante el método fitz.Rect()que requiere dos pares de coordenadas: (x1, y1) y (x2, y2). PyMuPDF interpreta la esquina superior izquierda de la página como (0,0).
Una vez que abrió el archivo de entrada y extrajo la primera página del mismo, la imagen que contiene el código de barras se agrega usando el método insertImage()Este método requiere dos parámetros: la posición entregada a través imageRectangley el nombre del archivo de imagen que se insertará. Usando el save()método el PDF modificado se almacena en el disco. La Figura 2 muestra el código de barras después de agregarlo al PDF de ejemplo.
Agregar un código de barras a un PDF existente usando PyMuPDF
# !/usr/bin/python

import fitz

input_file = "example.pdf"  
output_file = "example-with-barcode.pdf"  
barcode_file = "barcode.png"

# define the position (upper-right corner)
image_rectangle = fitz.Rect(450,20,550,120)

# retrieve the first page of the PDF
file_handle = fitz.open(input_file)  
first_page = file_handle[0]

# add the image
first_page.insertImage(image_rectangle, fileName=barcode_file)

file_handle.save(output_file)  

Añadiendo Sellos con pdfrw

pdfrw es un analizador de PDF basado en Python para leer y escribir documentos PDF. Reproduce fielmente formatos vectoriales sin rasterización. Para Debian GNU / Linux, el repositorio de paquetes contiene versiones para Python 2 y 3.
El siguiente ejemplo mostrará cómo agregar un código de barras o marca de agua a un PDF existente que contiene varias páginas. Desde el pdfrwpaquete es suficiente que importar las tres clases PdfReaderPdfWriterPageMergeA continuación, establece los objetos de lector y escritor correspondientes para acceder a los contenidos tanto del PDF como de la marca de agua. Para cada página del documento original, continúa creando un PageMergeobjeto al que agrega la marca de agua y que se procesa utilizando el render()método. Finalmente, escribe las páginas modificadas en el archivo de salida. La Figura 3 muestra el documento modificado junto al código que hizo posible la adición.
Agregar una marca de agua a un PDF existente usando pdfrw
# !/usr/bin/python
# Adding a watermark to a multi-page PDF

from pdfrw import PdfReader, PdfWriter, PageMerge

input_file = "example.pdf"  
output_file = "example-drafted.pdf"  
watermark_file = "barcode.pdf"

# define the reader and writer objects
reader_input = PdfReader(input_file)  
writer_output = PdfWriter()  
watermark_input = PdfReader(watermark_file)  
watermark = watermark_input.pages[0]

# go through the pages one after the next
for current_page in range(len(reader_input.pages)):  
    merger = PageMerge(reader_input.pages[current_page])
    merger.add(watermark).render()

# write the modified content to disk
writer_output.write(output_file, reader_input)  

Conclusión

Agregar imágenes, marcas de agua o sellos a un archivo PDF es bastante simple. Con unas pocas líneas de código, esta tarea de sonido complejo se resuelve en minutos. No importa cuál de las bibliotecas dadas elijas, funciona muy bien.
La tercera parte de esta serie se centrará exclusivamente en escribir / crear archivos PDF, y también incluirá tanto la eliminación como la combinación de páginas individuales en un nuevo documento.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas