Categorías
Python

NumPy, SciPy y pandas: correlación con Python

 

Tabla de Contenidos

  • Historia de pyPdf, PyPDF2 y pdfrw PyPDF4
  • : Un
  • Alternativa instalación

  • Cómo extraer información del documento de un PDF en Python
  • Cómo Rotar páginas
  • cómo combinar archivos PDF
  • ¿Cómo dividir archivos PDF
  • Cómo añadir marcas de agua
  • cómo cifrar un archivo PDF
  • Conclusión
  • lectura adicional

Mira ahora Este tutorial tiene un vídeo relacionado curso creado por el equipo del real Python. Mira que junto con el tutorial escrito para profundizar su comprensión: cómo trabajar con un archivo PDF en Python

El formato de documento portátil o PDF es un formato de archivo que puede ser utilizado para presentar documentos e intercambio fiable a través de los sistemas operativos. Mientras que el PDF fue inventado originalmente por Adobe, ahora es un estándar abierto que sea mantenida por la Organización Internacional de Normalización (ISO). Puede trabajar con un PDF preexistentes en Python usando el paquete PyPDF2 .

PyPDF2 es un paquete puro en Python que se puede utilizar para muchos tipos diferentes de operaciones PDF.

Al final de este artículo, usted sabrá cómo hacer lo siguiente:

  • Extraer información de documentos de un PDF en páginas Python
  • Rotar
  • PDF Merge
  • Dividir archivos PDF
  • añadir marcas de agua
  • cifrar un archivo PDF get de

Vamos a comenzar! Bono

gratuito: Haga clic aquí para obtener acceso a un capítulo de trucos Python: El libro que te muestra las mejores prácticas de Python con ejemplos sencillos puede aplicar instantáneamente a escribir código más bonito + Pythonic. volver manera

Historia de pyPdf, PyPDF2 y PyPDF4

El paquete pyPdf original fue lanzado en 2005. La última versión oficial de pyPdf fue en 2010. Después de un lapso de alrededor de un año, una compañía llamada Phasit patrocinó un tenedor de pyPdf PyPDF2 llamada. El código fue escrito para ser compatible con el original y funcionó bastante bien durante varios años, con su último lanzamiento en 2016. siendo

Hubo una serie breve de las emisiones de un paquete llamado PyPDF3, y después el proyecto fue renombrado a PyPDF4 . Todos estos proyectos hacen más o menos lo mismo, pero la mayor diferencia entre pyPdf y PyPDF2 + es que este último versiones añaden Python 3 apoyo. Hay un pitón 3 tenedor diferente de la pyPdf original para Python 3, pero que no se ha mantenido durante muchos años.

Mientras PyPDF2 fue recientemente abandonada, la nueva PyPDF4 no tiene plena compatibilidad hacia atrás con PyPDF2. La mayoría de los ejemplos de este artículo funcionará perfectamente bien con PyPDF4, pero hay algunos que no pueden, por lo que PyPDF4 no aparece más fuertemente en este artículo. No dude en intercambiar las importaciones para PyPDF2 con PyPDF4 y ver cómo funciona para usted.

pdfrw: Una Alternativa

Patrick Maupin creado un paquete llamado pdfrw que se pueden hacer muchas de las mismas cosas que hace PyPDF2. Puede utilizar pdfrw para todos el mismo tipo de tareas que usted aprenderá cómo hacer en este artículo para PyPDF2, con la notable excepción de cifrado.

La mayor diferencia cuando se trata de pdfrw es que se integra con el paquete ReportLab para que pueda tomar un PDF preexistentes y construir una nueva con ReportLab el uso de algunos o todos los PDF preexistentes. Instalación

Instalación PyPDF2 se puede hacer con PIP o Conda si sucede utilizar Anaconda en lugar de Python regular.

Así es como se instalaría PyPDF2 con pip:

$ pip install pypdf2

La instalación es bastante rápido como PyPDF2 no tiene ninguna dependencia. Es probable que pasar todo el tiempo de descargar el paquete a medida que se instale.

Ahora vamos a pasar y aprender cómo extraer información de un PDF.

Cómo extraer información del documento de un PDF en Python

Usted puede utilizar PyPDF2 para extraer metadatos y algo de texto de un PDF. Esto puede ser útil cuando estás haciendo ciertos tipos de automatización en sus archivos PDF preexistentes.

Estos son los tipos actuales de los datos que se pueden extraer:

  • Autor
  • creador
  • Productor
  • Asunto
  • Título
  • Número de páginas

Usted necesidad de ir a buscar a un PDF para su uso para este ejemplo . Se puede utilizar cualquier PDF que tengas a mano en su máquina. Para facilitar las cosas, fui a Leanpub y tome una muestra de uno de mis libros para este ejercicio. La muestra quiere descargar se llama reportlab-sample.pdf. escritura de

dejar un poco de código usando ese PDF y aprender cómo puede obtener acceso a estos atributos:

# extract_doc_info.py

from PyPDF2 import PdfFileReader

def extract_information(pdf_path):
with open(pdf_path, 'rb') as f:
pdf = PdfFileReader(f)
information = pdf.getDocumentInfo()
number_of_pages = pdf.getNumPages()

txt = f"""
Information about {pdf_path}:

Author: {information.author}
Creator: {information.creator}
Producer: {information.producer}
Subject: {information.subject}
Title: {information.title}
Number of pages: {number_of_pages}
"""

print(txt)
return information

if __name__ == '__main__':
path = 'reportlab-sample.pdf'
extract_information(path)

Aquí importar PdfFileReader del paquete PyPDF2. El PdfFileReader es una clase con varios métodos para interactuar con archivos PDF. En este ejemplo, se llama a .getDocumentInfo (), que devolverá una instancia de DocumentInformation. Este contiene la mayor parte de la información que le interesa. También llama .getNumPages () en el objeto lector, que devuelve el número de páginas del documento.

Nota: Eso usos del último bloque de código Python 3 nuevos F-strings para el formato de cadenas. Si desea obtener más información, se puede extraer de Python 3 f-Strings: Una Mejora de formato de cadenas Sintaxis (Guía).

La variable de información tiene varios atributos de ejemplo que puede utilizar para obtener el resto de los metadatos que desee en el documento. Imprime a cabo esa información y también volverlo para un posible uso futuro.

Mientras PyPDF2 tiene .extractText (), que se puede utilizar en sus objetos de página (que no se muestra en este ejemplo), no funciona muy bien. Algunos archivos PDF volverán texto y algunos se devolverá una cadena vacía. Cuando se quiere extraer el texto de un PDF, debe retirar el proyecto PDFMiner lugar. PDFMiner es mucho más robusto y fue diseñada específicamente para extraer texto de archivos PDF.

Ahora ya está listo para aprender acerca de cómo girar las páginas en PDF.

Cómo Rotar páginas

De vez en cuando, usted recibirá los archivos PDF que contengan páginas que están en modo horizontal en lugar de modo vertical. O tal vez incluso al revés. Esto puede suceder cuando alguien escanea un documento a PDF o correo electrónico. Se podría imprimir el documento y leer la versión en papel o puede usar el poder de Python para girar las páginas ofensivas.

Para este ejemplo, se puede ir y escoger un artículo real Python e imprimirlo en formato PDF. de

Let aprenden a girar algunas de las páginas de ese artículo con PyPDF2:

# rotate_pages.py

from PyPDF2 import PdfFileReader, PdfFileWriter

def rotate_pages(pdf_path):
pdf_writer = PdfFileWriter()
pdf_reader = PdfFileReader(path)
# Rotate page 90 degrees to the right
page_1 = pdf_reader.getPage(0).rotateClockwise(90)
pdf_writer.addPage(page_1)
# Rotate page 90 degrees to the left
page_2 = pdf_reader.getPage(1).rotateCounterClockwise(90)
pdf_writer.addPage(page_2)
# Add a page in normal orientation
pdf_writer.addPage(pdf_reader.getPage(2))

with open('rotate_pages.pdf', 'wb') as fh:
pdf_writer.write(fh)

if __name__ == '__main__':
path = 'Jupyter_Notebook_An_Introduction.pdf'
rotate_pages(path)

Para este ejemplo, tiene que importar el PdfFileWriter además de PdfFileReader, ya que necesitará para escribir un nuevo PDF. rotate_pages () toma en el camino hacia el PDF que desea modificar. Dentro de esa función, tendrá que crear un objeto de escritor que se puede nombrar pdf_writer y un objeto llamado lector de pdf_reader.

A continuación, puede utilizar .GetPage () para obtener la página deseada. Aquí agarrar la página cero, que es la primera página. Posteriormente, se llama el método del objeto .rotateClockwise página () y pasa en 90 grados. Luego de la segunda página, se llama a .rotateCounterClockwise () y pase de 90 grados también.

Nota: El paquete PyPDF2 sólo se le permite girar una página en incrementos de 90 grados. Recibirá un AssertionError lo contrario.

Después de cada llamada a los métodos de rotación, se llama .addPage (). Esto añadirá la versión girada de la página para el objeto escritor. La última página que se agrega al objeto escritor es la página 3, sin ninguna rotación hecho a él.

Por último, escribir el nuevo PDF utilizando .write (). Se necesita un objeto de fichero como parámetro. Este nuevo PDF contendrá tres páginas. Los dos primeros se girarán en direcciones opuestas una de la otra y estar en paisaje mientras que la tercera página es una página normal.

Ahora vamos a aprender cómo se puede combinar varios archivos PDF en uno solo.

cómo combinar archivos PDF

Hay muchas situaciones en las que tendrá que tener dos o más archivos PDF y unirlos en un solo PDF. Por ejemplo, es posible que tenga una portada estándar que tiene que ir a muchos tipos de informes. Puede utilizar Python para ayudarle a hacer ese tipo de cosas.

Para este ejemplo, se puede abrir un archivo PDF e imprimir una página en formato PDF separado. A continuación, hacerlo de nuevo, pero con una página diferente. Eso le dará un par de entradas a utilizar para propósitos de ejemplo. Ir de

Let adelante y escribir un código que se puede utilizar para archivos PDF se funden:

# pdf_merging.py

from PyPDF2 import PdfFileReader, PdfFileWriter

def merge_pdfs(paths, output):
pdf_writer = PdfFileWriter()

for path in paths:
pdf_reader = PdfFileReader(path)
for page in range(pdf_reader.getNumPages()):
# Add each page to the writer object
pdf_writer.addPage(pdf_reader.getPage(page))

# Write out the merged PDF
with open(output, 'wb') as out:
pdf_writer.write(out)

if __name__ == '__main__':
paths = ['document1.pdf', 'document2.pdf']
merge_pdfs(paths, output='merged.pdf')

Puede utilizar merge_pdfs () cuando se tiene una lista de archivos PDF que desea combinar juntos. También tendrá que saber dónde guardar el resultado, por lo que esta función toma una lista de rutas de entrada y una ruta de salida.

A continuación, un bucle sobre los insumos y crear un objeto lector de PDF para cada uno de ellos. A continuación se le iterar sobre todas las páginas del archivo PDF y utilizar .addPage () para agregar cada una de esas páginas a sí mismo.

Una vez que esté terminada la iteración sobre la totalidad de las páginas de todos los archivos PDF en su lista, usted escribirá el resultado al final.

Un artículo me gustaría señalar es que se podría mejorar este script un poco mediante la adición de una serie de páginas que se añade si no desea combinar todas las páginas de cada PDF. Si desea un desafío, también se puede crear una interfaz de línea de comandos para esta función utilizando el módulo argparse de Python. El hallazgo de

Let encontrar la manera de hacer lo contrario de la fusión!

cómo dividir archivos PDF

Hay ocasiones en las que podría tener un PDF que tiene que dividirse en varios archivos PDF. Esto es especialmente cierto de los archivos PDF que contienen una gran cantidad de escaneados en contenido, pero hay una gran cantidad de buenas razones para querer dividir un archivo PDF.

Así es como se puede utilizar para dividir PyPDF2 su PDF en varios archivos:

# pdf_splitting.py

from PyPDF2 import PdfFileReader, PdfFileWriter

def split(path, name_of_split):
pdf = PdfFileReader(path)
for page in range(pdf.getNumPages()):
pdf_writer = PdfFileWriter()
pdf_writer.addPage(pdf.getPage(page))

output = f'{name_of_split}{page}.pdf'
with open(output, 'wb') as output_pdf:
pdf_writer.write(output_pdf)

if __name__ == '__main__':
path = 'Jupyter_Notebook_An_Introduction.pdf'
split(path, 'jupyter_page')

En este ejemplo, una vez más crear un objeto lector de PDF y lazo sobre sus páginas. Para cada página en el PDF, se creará una nueva instancia escritor PDF y añadir una sola página a la misma. Entonces usted va a escribir esa página en un archivo con un nombre único. Cuando se ejecuta el script terminado, usted debe tener cada página de la división original del pdf en archivos PDF separados.

Ahora tomemos un momento para aprender cómo puede agregar una marca de agua a su PDF.

Cómo añadir marcas de agua

marcas de agua están identificando imágenes o patrones en documentos impresos y digitales. Algunas marcas de agua sólo puede ser visto en condiciones de iluminación especiales. La razón de marca de agua es importante es que le permite proteger su propiedad intelectual, tales como imágenes o archivos PDF. Otro término para la marca de agua es de superposición.

Puede utilizar Python y PyPDF2 a una marca de agua a sus documentos. Es necesario tener un PDF que contiene sólo su imagen o texto marca de agua. aprender a añadir una marca de agua ahora de

Let:

# pdf_watermarker.py

from PyPDF2 import PdfFileWriter, PdfFileReader

def create_watermark(input_pdf, output, watermark):
watermark_obj = PdfFileReader(watermark)
watermark_page = watermark_obj.getPage(0)

pdf_reader = PdfFileReader(input_pdf)
pdf_writer = PdfFileWriter()

# Watermark all the pages
for page in range(pdf_reader.getNumPages()):
page = pdf_reader.getPage(page)
page.mergePage(watermark_page)
pdf_writer.addPage(page)

with open(output, 'wb') as out:
pdf_writer.write(out)

if __name__ == '__main__':
create_watermark(
input_pdf='Jupyter_Notebook_An_Introduction.pdf',
output='watermarked_notebook.pdf',
watermark='watermark.pdf')

create_watermark () acepta tres argumentos:

En el código, se abre el PDF marca de agua y agarrar sólo la primera página del documento ya que es donde la marca de agua debe residir . A continuación, se crea un objeto lector de PDF utilizando el input_pdf y un objeto pdf_writer genérico para escribir el PDF con marcas de agua.

El siguiente paso es para repetir las páginas en el input_pdf. Aquí es donde sucede la magia. Tendrá que llamar .mergePage () y pasarle el watermark_page. Cuando se hace esto, se superpondrá a la watermark_page en la parte superior de la página actual. Luego de agregar esa página recién fusionada a su objeto pdf_writer.

Por último, se escribe el PDF de nueva marca de agua a disco, y ya está!

El último tema, aprenderá acerca de cómo es el cifrado de asas PyPDF2.

Cómo cifrar un archivo PDF

PyPDF2 actualmente sólo es compatible con la adición de una contraseña de usuario y una contraseña de propietario a un PDF preexistentes. En la tierra PDF, una contraseña de propietario, básicamente, darle privilegios de administrador sobre el PDF y le permitirá establecer permisos sobre el documento. Por otro lado, la contraseña de usuario sólo le permite abrir el documento.

Por lo que yo puedo decir, PyPDF2 en realidad no le permiten establecer los permisos sobre el documento a pesar de que no le permiten establecer la contraseña de propietario.

pesar de todo, esto es cómo se puede añadir una contraseña, que también inherentemente cifrar el PDF:

# pdf_encrypt.py

from PyPDF2 import PdfFileWriter, PdfFileReader

def add_encryption(input_pdf, output_pdf, password):
pdf_writer = PdfFileWriter()
pdf_reader = PdfFileReader(input_pdf)

for page in range(pdf_reader.getNumPages()):
pdf_writer.addPage(pdf_reader.getPage(page))

pdf_writer.encrypt(user_pwd=password, owner_pwd=None,
use_128bit=True)

with open(output_pdf, 'wb') as fh:
pdf_writer.write(fh)

if __name__ == '__main__':
add_encryption(input_pdf='reportlab-sample.pdf',
output_pdf='reportlab-encrypted.pdf',
password='twofish')

add_encryption () toma en los caminos PDF de entrada y salida, así como la contraseña que desea agregar al archivo PDF. A continuación, se abre un escritor PDF y lector de un objeto, como antes. Desde que se desea cifrar el PDF completo de entrada, necesitará para recorrer todas sus páginas y añadir a la escritora.

El paso final es llamar .encrypt (), que toma la contraseña de usuario, la contraseña de propietario, y si o no cifrado de 128 bits debe añadirse. El valor por defecto es para el cifrado de 128 bits para ser encendido. Si se establece en False, entonces el cifrado de 40 bits se aplicará en su lugar.

Nota: PDF utiliza el cifrado RC4, ya sea o AES (Advanced Encryption Standard) para cifrar el PDF de acuerdo con pdflib.com.

Sólo porque usted ha cifrado su PDF no significa que es necesariamente seguro. Existen herramientas para eliminar las contraseñas de los archivos PDF. Si desea obtener más información, Carnegie Mellon University tiene un interesante artículo sobre el tema.

Conclusión paquete

El PyPDF2 es bastante útil y suele ser bastante rápido. Se puede utilizar para automatizar PyPDF2 grandes puestos de trabajo y aprovechar sus capacidades para ayudar a hacer su trabajo mejor!

En este tutorial, aprendió a hacer el siguiente:

  • de extracción de metadatos de un PDF páginas
  • Rotar
  • Combinar y dividir archivos PDF
  • añadir marcas de agua Agregar cifrado

También hay que tener un ojo en el más reciente PyPDF4 paquete, ya que es probable que reemplace PyPDF2 pronto. Es posible que también desee comprobar hacia fuera pdfrw, lo que puede hacer muchas de las mismas cosas que PyPDF2 puede hacer.

Lectura adicional

Si desea aprender más acerca de trabajar con archivos PDF en Python, que debe salir algunos de los siguientes recursos para obtener más información: Sitio Web

  • El PyPDF2 página
  • El Github para PyPDF4
  • El Github página web para pdfrw
  • el ReportLab página
  • el Github para PDFMiner
  • Camelot: PDF Tabla Extractor de seres humanos

Mira ahora Este tutorial tiene un vídeo relacionado curso creado por el equipo del real Python. Mira que junto con el tutorial escrito para profundizar su comprensión: cómo trabajar con un archivo PDF en Python

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *