logo

Trabajar con archivos PDF en Python

Todos ustedes deben estar familiarizados con lo que son los archivos PDF. De hecho, son uno de los medios digitales más importantes y utilizados. PDF significa Formato de Documento Portable . Usa .pdf extensión. Se utiliza para presentar e intercambiar documentos de forma fiable, independientemente del software, hardware o sistema operativo.
Inventado por Adobe , PDF es ahora un estándar abierto mantenido por la Organización Internacional de Normalización (ISO). Los archivos PDF pueden contener enlaces y botones, campos de formulario, audio, vídeo y lógica empresarial.
En este artículo, aprenderemos cómo podemos realizar varias operaciones como:

  • Extraer texto de PDF
  • Girar páginas PDF
  • Fusionar archivos PDF
  • Dividir PDF
  • Agregar marca de agua a páginas PDF

Instalación: ¡Usando scripts simples de Python!
Usaremos un módulo de terceros, pypdf.
pypdf es una biblioteca de Python construida como un conjunto de herramientas PDF. Es capaz de:



  • Extracción de información del documento (título, autor,…)
  • Dividir documentos página por página
  • Fusionar documentos página por página
  • Recortar páginas
  • Fusionar varias páginas en una sola página
  • Cifrar y descifrar archivos PDF
  • ¡y más!

Para instalar pypdf, ejecute el siguiente comando desde la línea de comando:

pip install pypdf>

El nombre de este módulo distingue entre mayúsculas y minúsculas, así que asegúrese de que y está en minúsculas y todo lo demás está en mayúsculas. Todo el código y los archivos PDF utilizados en este tutorial/artículo están disponibles aquí .

1. Extraer texto de un archivo PDF



Pitón






# importing required classes> from> pypdf>import> PdfReader> > # creating a pdf reader object> reader>=> PdfReader(>'example.pdf'>)> > # printing number of pages in pdf file> print>(>len>(reader.pages))> > # creating a page object> page>=> reader.pages[>0>]> > # extracting text from page> print>(page.extract_text())>

>

>

El resultado del programa anterior se ve así:

20 PythonBasics S.R.Doty August27,2008 Contents 1Preliminaries 4 1.1WhatisPython?................................... ..4 1.2Installationanddocumentation.................... .........4   [and some more lines...]>

Intentemos comprender el código anterior en fragmentos:

reader = PdfReader('example.pdf')>
  • Aquí creamos un objeto de Lector PDF clase de módulo pypdf y pase la ruta al archivo PDF y obtenga un objeto lector de PDF.
print(len(reader.pages))>
  • paginas La propiedad proporciona el número de páginas del archivo PDF. Por ejemplo, en nuestro caso, es 20 (ver la primera línea de resultado).
pageObj = reader.pages[0]>
  • Ahora creamos un objeto de Objeto de página clase de módulo pypdf. El objeto lector de PDF tiene función paginas[] que toma el número de página (a partir del índice 0) como argumento y devuelve el objeto de la página.
print(pageObj.extract_text())>
  • El objeto de página tiene función extraer_texto() para extraer texto de la página PDF.

Nota: Si bien los archivos PDF son excelentes para diseñar texto de una manera que sea fácil de imprimir y leer para las personas, no es sencillo para el software analizarlos en texto sin formato. Como tal, pypdf puede cometer errores al extraer texto de un PDF e incluso es posible que no pueda abrir algunos archivos PDF. Desafortunadamente, no hay mucho que puedas hacer al respecto. Es posible que pypdf simplemente no pueda trabajar con algunos de sus archivos PDF particulares.

2. Rotar páginas PDF

Pitón




# importing the required classes> from> pypdf>import> PdfReader, PdfWriter> > def> PDFrotate(origFileName, newFileName, rotation):> > ># creating a pdf Reader object> >reader>=> PdfReader(origFileName)> > ># creating a pdf writer object for new pdf> >writer>=> PdfWriter()> > ># rotating each page> >for> page>in> range>(>len>(reader.pages)):> > ># creating rotated page object> >pageObj>=> reader.pages[page]> >pageObj.rotate(rotation)> > ># adding rotated page object to pdf writer> >pdfWriter.add_page(pageObj)> > ># new pdf file object> >newFile>=> open>(newFileName,>'wb'>)> > ># writing rotated pages to new file> >pdfWriter.write(newFile)> > ># closing the new pdf file object> >newFile.close()> > > def> main():> > ># original pdf file name> >origFileName>=> 'example.pdf'> > ># new pdf file name> >newFileName>=> 'rotated_example.pdf'> > ># rotation angle> >rotation>=> 270> > ># calling the PDFrotate function> >PDFrotate(origFileName, newFileName, rotation)> > if> __name__>=>=> '__main__'>:> ># calling the main function> >main()>

>

>

Aquí puedes ver cómo la primera página de ejemplo_rotado.pdf parece (imagen de la derecha) después de la rotación:

Rotar un archivo pdf

Algunos puntos importantes relacionados con el código anterior:

ordenar una lista de matrices en java
  • Para la rotación, primero creamos un objeto lector de PDF del PDF original.
writer = PdfWriter()>
  • Las páginas rotadas se escribirán en un nuevo PDF. Para escribir en archivos PDF, utilizamos el objeto de Escritor de PDF clase de módulo pypdf.
for page in range(len(pdfReader.pages)): pageObj = pdfReader.pages[page] pageObj.rotate(rotation) pdfWriter.add_page(pageObj)>
  • Ahora, iteramos cada página del PDF original. Obtenemos el objeto de página por .páginas[] método de la clase de lector de PDF. Ahora rotamos la página girar() método de clase de objeto de página. Luego, agregamos una página al objeto del escritor PDF usando agregar() método de la clase de escritor de PDF pasando el objeto de página rotada.
newFile = open(newFileName, 'wb') pdfWriter.write(newFile) newFile.close()>
  • Ahora tenemos que escribir las páginas PDF en un nuevo archivo PDF. En primer lugar, abrimos el nuevo objeto de archivo y le escribimos páginas PDF usando escribir() método del objeto de escritura de PDF. Finalmente, cerramos el objeto de archivo PDF original y el nuevo objeto de archivo.

3. Fusionar archivos PDF

Pitón




# importing required modules> from> pypdf>import> PdfMerger> > > def> PDFmerge(pdfs, output):> ># creating pdf file merger object> >pdfMerger>=> PdfMerger()> > ># appending pdfs one by one> >for> pdf>in> pdfs:> >pdfMerger.append(pdf)> > ># writing combined pdf to output pdf file> >with>open>(output,>'wb'>) as f:> >pdfMerger.write(f)> > > def> main():> ># pdf files to merge> >pdfs>=> [>'example.pdf'>,>'rotated_example.pdf'>]> > ># output pdf file name> >output>=> 'combined_example.pdf'> > ># calling pdf merge function> >PDFmerge(pdfs>=>pdfs, output>=>output)> > > if> __name__>=>=> '__main__'>:> ># calling the main function> >main()>

>

>

El resultado del programa anterior es un PDF combinado, ejemplo_combinado.pdf , obtenido al fusionar ejemplo.pdf y ejemplo_rotado.pdf .

  • Echemos un vistazo a los aspectos importantes de este programa:
pdfMerger = PdfMerger()>
  • Para fusionar, utilizamos una clase prediseñada, PdfFusión del módulo pypdf.
    Aquí creamos un objeto. pdfFusión de clase de fusión PDF
for pdf in pdfs: pdfmerger.append(open(focus, 'rb'))>
  • Ahora, agregamos el objeto de archivo de cada PDF al objeto de fusión de PDF usando el adjuntar() método.
with open(output, 'wb') as f: pdfMerger.write(f)>
  • Finalmente, escribimos las páginas PDF en el archivo PDF de salida usando escribir método de objeto de fusión PDF.

4. Dividir archivo PDF

Pitón




# importing the required modules> from> pypdf>import> PdfReader, PdfWriter> > def> PDFsplit(pdf, splits):> ># creating pdf reader object> >reader>=> PdfReader(pdf)> > ># starting index of first slice> >start>=> 0> > ># starting index of last slice> >end>=> splits[>0>]> > > >for> i>in> range>(>len>(splits)>+>1>):> ># creating pdf writer object for (i+1)th split> >writer>=> PdfWriter()> > ># output pdf file name> >outputpdf>=> pdf.split(>'.pdf'>)[>0>]>+> str>(i)>+> '.pdf'> > ># adding pages to pdf writer object> >for> page>in> range>(start,end):> >writer.add_page(reader.pages[page])> > ># writing split pdf pages to pdf file> >with>open>(outputpdf,>'wb'>) as f:> >writer.write(f)> > ># interchanging page split start position for next split> >start>=> end> >try>:> ># setting split end position for next split> >end>=> splits[i>+>1>]> >except> IndexError:> ># setting split end position for last split> >end>=> len>(reader.pages)> > > def> main():> ># pdf file to split> >pdf>=> 'example.pdf'> > ># split page positions> >splits>=> [>2>,>4>]> > ># calling PDFsplit function to split pdf> >PDFsplit(pdf, splits)> > if> __name__>=>=> '__main__'>:> ># calling the main function> >main()>

>

>

La salida serán tres nuevos archivos PDF con división 1 (página 0,1), división 2 (página 2,3), división 3 (página 4-final) .
No se ha utilizado ninguna función o clase nueva en el programa Python anterior. Usando lógica simple e iteraciones, creamos las divisiones del PDF pasado de acuerdo con la lista aprobada. se divide .

5. Agregar marcas de agua a las páginas PDF

Pitón




# importing the required modules> from> pypdf>import> PdfReader> > def> add_watermark(wmFile, pageObj):> ># creating pdf reader object of watermark pdf file> >reader>=> PdfReader(wmFileObj)> > ># merging watermark pdf's first page with passed page object.> >pageObj.merge_page(reader.pages[>0>])> > ># returning watermarked page object> >return> pageObj> > def> main():> ># watermark pdf file name> >mywatermark>=> 'watermark.pdf'> > ># original pdf file name> >origFileName>=> 'example.pdf'> > ># new pdf file name> >newFileName>=> 'watermarked_example.pdf'> > ># creating pdf File object of original pdf> >pdfFileObj>=> open>(origFileName,>'rb'>)> > ># creating a pdf Reader object> >reader>=> PdfReader(pdfFileObj)> > ># creating a pdf writer object for new pdf> >writer>=> PdfWriter()> > ># adding watermark to each page> >for> page>in> range>(>len>(reader.pages)):> ># creating watermarked page object> >wmpageObj>=> add_watermark(mywatermark, reader.pages[page])> > ># adding watermarked page object to pdf writer> >writer.add_page(wmpageObj)> > ># new pdf file object> >newFile>=> open>(newFileName,>'wb'>)> > ># writing watermarked pages to new file> >writer.write(newFile)> > ># closing the new pdf file object> >newFile.close()> > if> __name__>=>=> '__main__'>:> ># calling the main function> >main()>

seleccionar como
>

>

Así es como se ve la primera página del archivo PDF original (izquierda) y con marca de agua (derecha):

Marca de agua en el archivo pdf.

  • Todo el proceso es el mismo que en el ejemplo de rotación de página. La única diferencia es:
wmpageObj = add_watermark(mywatermark, pdfReader.pages[page])>
  • El objeto de página se convierte en un objeto de página con marca de agua usando agregar_marca de agua() función.
  • Intentemos comprender agregar_marca de agua() función:
reader = PdfReader(wmFile) pageObj.merge_page(reader.pages[0]) wmFileObj.close() return pageObj>
  • Ante todo, creamos un objeto lector de PDF de marca de agua.pdf . Para el objeto de página pasado, usamos fusionar_página() función y pasa el objeto de página de la primera página del objeto lector de PDF de marca de agua. Esto superpondrá la marca de agua sobre el objeto de página pasado.

Y aquí llegamos al final de este largo tutorial sobre cómo trabajar con archivos PDF en Python.
¡Ahora puedes crear fácilmente tu propio administrador de PDF!
Referencias:

Si le gusta techcodeview.com y le gustaría contribuir, también puede escribir un artículo utilizando write.techcodeview.com o enviar su artículo por correo a [email protected]
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema discutido anteriormente.