Usando Python para trabajar con pdfs

Artículo principal aqui

Primero instalaremos la librería:

1
pip install pypdf2

Abriendo un pdf

Podéis descargaros este pdf de muestra y correr el siguiente programa:

1 2 3 4 5 6 7
>>> import PyPDF2
>>> pdfFileObj = open('meetingminutes.pdf', 'rb')
>>> pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
>>> pdfReader.numPages
   19
>>> pageObj = pdfReader.getPage(0)
>>> pageObj.extractText()

Creando un pdf

>>> import PyPDF2
>>> pdf1File = open('elmuestreo.pdf', 'rb')
>>> pdf2File = open('elmuestreo1.pdf', 'rb')
>>> pdf1Reader = PyPDF2.PdfFileReader(pdf1File)
>>> pdf2Reader = PyPDF2.PdfFileReader(pdf2File)
>>> pdfWriter = PyPDF2.PdfFileWriter()

>>> for pageNum in range(pdf1Reader.numPages):
        pageObj = pdf1Reader.getPage(pageNum)
        pdfWriter.addPage(pageObj)

>>> for pageNum in range(pdf2Reader.numPages):
        pageObj = pdf2Reader.getPage(pageNum)
        pdfWriter.addPage(pageObj)

>>> pdfOutputFile = open('combinedminutes.pdf', 'wb')
>>> pdfWriter.write(pdfOutputFile)
>>> pdfOutputFile.close()
>>> pdf1File.close()
>>> pdf2File.close()

Rotando páginas

1 2 3 4 5 6 7 8 9 10 11 12 13 14
>>>import PyPDF2
>>>minutesFile = open('meetingminutes.pdf', 'rb')
>>>pdfReader = PyPDF2.PdfFileReader(minutesFile)
>>> page = pdfReader.getPage(0)
>>> page.rotateClockwise(90)
   {'/Contents': [IndirectObject(961, 0), IndirectObject(962, 0),
   --snip--
   }
>>>pdfWriter = PyPDF2.PdfFileWriter()
>>>pdfWriter.addPage(page)
>>> resultPdfFile = open('rotatedPage.pdf', 'wb')
>>>pdfWriter.write(resultPdfFile)
>>>resultPdfFile.close()
>>>minutesFile.close()

Superpeniendo imágenes como logos o marcas de agua

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
>>>import PyPDF2
>>>minutesFile = open('meetingminutes.pdf', 'rb')
>>> pdfReader = PyPDF2.PdfFileReader(minutesFile)
>>> minutesFirstPage = pdfReader.getPage(0)
>>> pdfWatermarkReader = PyPDF2.PdfFileReader(open('watermark.pdf', 'rb'))
>>> minutesFirstPage.mergePage(pdfWatermarkReader.getPage(0))
>>> pdfWriter = PyPDF2.PdfFileWriter()
>>> pdfWriter.addPage(minutesFirstPage)

>>> for pageNum in range(1, pdfReader.numPages):
        pageObj = pdfReader.getPage(pageNum)
        pdfWriter.addPage(pageObj)
>>>resultPdfFile = open('watermarkedCover.pdf', 'wb')
>>>pdfWriter.write(resultPdfFile)
>>>minutesFile.close()
>>>resultPdfFile.close()

Para comentar varias líneas de código de golpe en Visual Studio Code:

  • Ctrl + k Ctrl + c
  • Ctrl + k Ctrl + u

Ejercicio 18

Si no lo has hecho ya, descarga este documentohttp://www.estadistica.mat.uson.mx/Material/elmuestreo.pdf

Combina en un sólo pdf, dos copias del mismo, la segunda con todas las páginas rotadas.

Solución
import PyPDF2
pdf1File = open('elmuestreo.pdf', 'rb')
pdf2File = open('elmuestreo1.pdf', 'rb')
pdf1Reader = PyPDF2.PdfFileReader(pdf1File)
pdf2Reader = PyPDF2.PdfFileReader(pdf2File)
pdfWriter = PyPDF2.PdfFileWriter()

for pageNum in range(pdf1Reader.numPages):
    pageObj = pdf1Reader.getPage(pageNum)
    pdfWriter.addPage(pageObj)

for pageNum in range(pdf2Reader.numPages):
    pageObj = pdf2Reader.getPage(pageNum)
    pdfWriter.addPage(pageObj)

pdfOutputFile = open('combinedminutes.pdf', 'wb')
pdfWriter.write(pdfOutputFile)
pdfOutputFile.close()
pdf1File.close()
pdf2File.close()

results matching ""

    No results matching ""