Todos ustedes deben estar familiarizados con lo que son los archivos PDF. De hecho, son uno de los medios digitales más importantes y más utilizados. PDF significa formato de documento portátil . Utiliza la extensión .pdf . Se utiliza para presentar e intercambiar documentos de manera confiable, 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, video y lógica empresarial.
En este artículo, aprenderemos cómo podemos hacer varias operaciones como:
- Extraer texto de PDF
- Rotación de páginas PDF
- Combinar archivos PDF
- Dividir PDF
- Agregar marca de agua a páginas PDF
usando simples scripts de python!
Instalación
Usaremos un módulo de terceros, PyPDF2.
PyPDF2 es una biblioteca de python creada como un conjunto de herramientas de PDF. Es capaz de:
- Extraer información del documento (título, autor,…)
- División de documentos página por página
- Combinar documentos página por página
- Recortar páginas
- Combinar varias páginas en una sola página
- Cifrado y descifrado de archivos PDF
- ¡y más!
Para instalar PyPDF2, ejecute el siguiente comando desde la línea de comando:
pip3 install PyPDF2
El nombre de este módulo distingue entre mayúsculas y minúsculas, así que asegúrese de que la y esté en minúsculas y que 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
Python
# importing required modules import PyPDF2 # creating a pdf file object pdfFileObj = open('example.pdf', 'rb') # creating a pdf reader object pdfReader = PyPDF2.PdfFileReader(pdfFileObj) # printing number of pages in pdf file print(pdfReader.numPages) # creating a page object pageObj = pdfReader.getPage(0) # extracting text from page print(pageObj.extractText()) # closing the pdf file object pdfFileObj.close()
La salida 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...]
Tratemos de entender el código anterior en fragmentos:
pdfFileObj = open('example.pdf', 'rb')
- Abrimos el ejemplo.pdf en modo binario. Y guardó el objeto de archivo como pdfFileObj .
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
- Aquí, creamos un objeto de la clase PdfFileReader del módulo PyPDF2 y pasamos el objeto de archivo PDF y obtenemos un objeto de lector de PDF.
print(pdfReader.numPages)
- La propiedad numPages da el número de páginas en el archivo PDF. Por ejemplo, en nuestro caso, es 20 (ver primera línea de salida).
pageObj = pdfReader.getPage(0)
- Ahora, creamos un objeto de la clase PageObject del módulo PyPDF2. El objeto del lector de PDF tiene la función getPage() 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.extractText())
- El objeto de página tiene la función extractText() para extraer texto de la página PDF.
pdfFileObj.close()
- Por último, cerramos el objeto del archivo 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 son sencillos para que el software los analice en texto sin formato. Como tal, PyPDF2 puede cometer errores al extraer texto de un PDF e incluso es posible que no pueda abrir algunos PDF. Desafortunadamente, no hay mucho que puedas hacer al respecto. Es posible que PyPDF2 simplemente no pueda trabajar con algunos de sus archivos PDF particulares.
2. Rotación de páginas PDF
Python
# importing the required modules import PyPDF2 def PDFrotate(origFileName, newFileName, rotation): # creating a pdf File object of original pdf pdfFileObj = open(origFileName, 'rb') # creating a pdf Reader object pdfReader = PyPDF2.PdfFileReader(pdfFileObj) # creating a pdf writer object for new pdf pdfWriter = PyPDF2.PdfFileWriter() # rotating each page for page in range(pdfReader.numPages): # creating rotated page object pageObj = pdfReader.getPage(page) pageObj.rotateClockwise(rotation) # adding rotated page object to pdf writer pdfWriter.addPage(pageObj) # new pdf file object newFile = open(newFileName, 'wb') # writing rotated pages to new file pdfWriter.write(newFile) # closing the original pdf file object pdfFileObj.close() # 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í puede ver cómo se ve la primera página de giratorio_ejemplo.pdf (imagen de la derecha) después de la rotación:
Algunos puntos importantes relacionados con el código anterior:
- Para la rotación, primero creamos un objeto lector de PDF del PDF original.
pdfWriter = PyPDF2.PdfFileWriter()
- Las páginas giradas se escribirán en un nuevo PDF. Para escribir en archivos PDF, usamos el objeto de la clase PdfFileWriter del módulo PyPDF2.
for page in range(pdfReader.numPages): pageObj = pdfReader.getPage(page) pageObj.rotateClockwise(rotation) pdfWriter.addPage(pageObj)
- Ahora, iteramos cada página del PDF original. Obtenemos el objeto de la página mediante el método getPage() de la clase de lector de PDF. Ahora, giramos la página con el método de la clase de objeto de página de la clase de objeto de página. Luego, agregamos una página al objeto de escritor de PDF usando el método addPage() de la clase de escritor de PDF al pasar el objeto de página girado.
newFile = open(newFileName, 'wb') pdfWriter.write(newFile) pdfFileObj.close() 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 escribimos páginas PDF en él usando el método write() del objeto de escritura de PDF. Finalmente, cerramos el objeto de archivo PDF original y el nuevo objeto de archivo.
3. Combinar archivos PDF
Python
# importing required modules import PyPDF2 def PDFmerge(pdfs, output): # creating pdf file merger object pdfMerger = PyPDF2.PdfFileMerger() # 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 , combine_example.pdf , obtenido al fusionar example.pdf y rotated_example.pdf .
- Echemos un vistazo a los aspectos importantes de este programa:
pdfMerger = PyPDF2.PdfFileMerger()
- Para fusionar, usamos una clase preconstruida, PdfFileMerger del módulo PyPDF2.
Aquí, creamos un objeto pdfMerger de la clase de fusión de PDF
for pdf in pdfs: pdfmerger.append(open(focus, "rb"))
- Ahora, agregamos el objeto de archivo de cada objeto de fusión de PDF a PDF usando el método append() .
with open(output, 'wb') as f: pdfMerger.write(f)
- Finalmente, escribimos las páginas PDF en el archivo PDF de salida utilizando el método de escritura del objeto de fusión de PDF.
4. Dividir archivo PDF
Python
# importing the required modules import PyPDF2 def PDFsplit(pdf, splits): # creating input pdf file object pdfFileObj = open(pdf, 'rb') # creating pdf reader object pdfReader = PyPDF2.PdfFileReader(pdfFileObj) # 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 pdfWriter = PyPDF2.PdfFileWriter() # output pdf file name outputpdf = pdf.split('.pdf')[0] + str(i) + '.pdf' # adding pages to pdf writer object for page in range(start,end): pdfWriter.addPage(pdfReader.getPage(page)) # writing split pdf pages to pdf file with open(outputpdf, "wb") as f: pdfWriter.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 = pdfReader.numPages # closing the input pdf file object pdfFileObj.close() 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á 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-fin) .
No se ha utilizado ninguna función o clase nueva en el programa Python anterior. Usando lógica e iteraciones simples, creamos las divisiones del PDF pasado de acuerdo con las divisiones de la lista pasada .
5. Agregar marca de agua a páginas PDF
Python
# importing the required modules import PyPDF2 def add_watermark(wmFile, pageObj): # opening watermark pdf file wmFileObj = open(wmFile, 'rb') # creating pdf reader object of watermark pdf file pdfReader = PyPDF2.PdfFileReader(wmFileObj) # merging watermark pdf's first page with passed page object. pageObj.mergePage(pdfReader.getPage(0)) # closing the watermark pdf file object wmFileObj.close() # 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 pdfReader = PyPDF2.PdfFileReader(pdfFileObj) # creating a pdf writer object for new pdf pdfWriter = PyPDF2.PdfFileWriter() # adding watermark to each page for page in range(pdfReader.numPages): # creating watermarked page object wmpageObj = add_watermark(mywatermark, pdfReader.getPage(page)) # adding watermarked page object to pdf writer pdfWriter.addPage(wmpageObj) # new pdf file object newFile = open(newFileName, 'wb') # writing watermarked pages to new file pdfWriter.write(newFile) # closing the original pdf file object pdfFileObj.close() # closing the new pdf file object newFile.close() if __name__ == "__main__": # calling the main function main()
Así es como se ve la primera página del archivo PDF original (izquierda) y con marca de agua (derecha):
- Todo el proceso es el mismo que el ejemplo de rotación de página. La única diferencia es:
wmpageObj = add_watermark(mywatermark, pdfReader.getPage(page))
- El objeto de página se convierte en un objeto de página con marca de agua mediante la función add_watermark() .
- Tratemos de entender la función add_watermark() :
wmFileObj = open(wmFile, 'rb') pdfReader = PyPDF2.PdfFileReader(wmFileObj) pageObj.mergePage(pdfReader.getPage(0)) wmFileObj.close() return pageObj
- En primer lugar, creamos un objeto lector de PDF de marca de agua.pdf . Para el objeto de página pasado, usamos la función mergePage() y pasamos 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 puede crear fácilmente su propio administrador de PDF!
Referencias:
Este artículo es una contribución de Nikhil Kumar . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA