Herramientas de usuario

Herramientas del sitio


python:pdf

¡Esta es una revisión vieja del documento!


Trabajar en Python con PDF

Los PDFs son documentos binarios que albergan una gran cantidad de información, y que son mucho más complejos que los documentos de texto plano.
Para trabajar con documentos PDF desde Python se usará el módulo PyPDF2. Es un módulo qde terceros que hay que instalar, en estas notas se usará la versión 1.26.0: pip install –user PyPDF2==1.26.0

El formato PDF es muy particular y cabe la posibilidad que se produzcan fallos a la hora de extraer texto. Es algo que hay que tener en cuenta y que es inevitable.

Extraer texto de PDF

El módulo PyPDF2 no tiene ninguna función para extraer elementos multimedia, pero puede extraer texto y retornarlo a Python como un string.

Los pasos para extraer texto de un pdf son los siguientes:

  1. Importar el módulo PyPDF2.
  2. Abrimos el documento PDF con open(), que devuelve un objeto tipo pdfFileObj:
    1. El primer argumento es el nombre del propio documento.
    2. El segundo argumento es 'rb': lectura en modo binario.
  3. A continuación, usamos el método PyPDF.FileReader(), al que se le pasa como argumento el objeto pdfFileObj obtenido anteriormente, para obtener un objeto pdfReader que representa el documento PDF leíble.
  4. Podemos obtener el número de páginas del documento con el atributo pdfReader.numPages.
  5. Para extraer el texto debemos obtener la página del texto a extraer, usando el método objetoPdfReader.getPage(), pasando como argumento el número de página (la primera responde al índice 0 en lugar de 1). El objeto obtenido es de tipo pageObj.
  6. Con el último objeto obtenido, usamos el método objetoPageObj.extractText() para extrer un string con el texto completo de la página.
import PyPDF2
docPdf = open('miDocumento.pdf', 'rb')
docPdfLeible = PyPDF2.PdfFileReader(docPdf)
docPdfLeible.numpages   # Devuelve el número de páginas del PDF
paginaPDF = docPdfLeible.getPage(3)   # Extraemos la página 4 de la que queremos obtener el texto.
textoPDF = paginaPDF.extractText()
# ...  # Cosas que hacer con el texto
docPdf.close()

Desencriptar PDFs

Spoiler: Hay que conocer la contraseña con la que han sido encriptados. Lógicamente.

  1. Abrir el documento y obtener el objeto que lo hace leíble:
    import PyPDF2
    docPdf = pyPDF2.PdfFileReader(open('DocumentoEncriptado.pdf', 'rb'))
  2. Para comprobar si el documento está encriptado, podemos comprobar el atributo .isEncrypted:
    docPdf.isEncrypted  # True
  3. Obtenemos la página de la que queremos extraer el texto, obteniendo un error:
    docPdf.getPage(0)
    Traceback (most recent call last):
      File "<pyshell#173>", line 1, in <module>
        pdfReader.getPage()
        --snip--
        File "C:\Python34\lib\site-packages\PyPDF2\pdf.py", line 1173, in getObject
          raise utils.PdfReadError("file has not been decrypted")
      PyPDF2.utils.PdfReadError: file has not been decrypted
  4. Volvemos a cargar el documento desde el principio y desencriptamos con la función decrypt('contraseña')*. Si el documento se desencripta correctamente, devuelve 1.
    docPdf = pyPDF2.PdfFileReader(open('DocumentoEncriptado.pdf', 'rb'))
    docPdf.decrypt('//contraseña//')
  5. Una vez desencriptado el documento, extraemos la página.
    pagina = docPdf.getPage(0)
python/pdf.1649548399.txt.gz · Última modificación: por alberto

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki