Herramientas de usuario

Herramientas del sitio


python:pdf

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
python:pdf [2022/04/10 01:53] – [Desencriptar PDFs] albertopython:pdf [2022/04/10 03:06] (actual) – [Sobreponiendo páginas] alberto
Línea 36: Línea 36:
 docPdf = pyPDF2.PdfFileReader(open('DocumentoEncriptado.pdf', 'rb'))</code> docPdf = pyPDF2.PdfFileReader(open('DocumentoEncriptado.pdf', 'rb'))</code>
   - Para comprobar si el documento está encriptado, podemos comprobar el atributo **.isEncrypted**:<code python>docPdf.isEncrypted  # True</code>   - Para comprobar si el documento está encriptado, podemos comprobar el atributo **.isEncrypted**:<code python>docPdf.isEncrypted  # True</code>
-  - Obtenemos la página de la que queremos extraer el texto, obteniendo un error:<code python>docPdf.getPage(0) +  - Desencriptamos con la función decrypt('//contraseña//'). Si el documento se desencripta correctamente, devuelve 1. <code python>docPdf.decrypt('//contraseña//')</code>
-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</code> +
-  - 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. <code python>docPdf = pyPDF2.PdfFileReader(open('DocumentoEncriptado.pdf', 'rb')) +
-docPdf.decrypt('//contraseña//')</code>+
   - Una vez desencriptado el documento, extraemos la página.<code python>pagina = docPdf.getPage(0)</code>   - Una vez desencriptado el documento, extraemos la página.<code python>pagina = docPdf.getPage(0)</code>
 +
 +Debido a un //bug// en la versión 1.26.0 de PyDF2, se produce un error //IndexError: list index out of range// cuando se llama a getPage(), si ésta ha sido llamada anteriormente, antes de decrypt(). Si se diese el Caso, para evitar ese error, es necesario volver a abrir el documento. 
 +
 +===== Crear PDFs =====
 +PyPDF2 no permite crear PDSFs editándolos manualmente. Lo que hace es crear un PDF, a aprtir de pegar, rotar, sobreponer o encriptar otros PDFs:\\
 +  - Abrir los archivos PDF de los que se extraerá la información, obteniendo los objetos PdfFileReader correspondientes.
 +  - Crear un nuevo objeto tipo PdfFileWriter.
 +  - Copiar las págins que nos interesen de los objetos abiertos, al objeto PdfFileWriter.
 +  - Usar éste último para escribir en el PDF.
 +
 +==== Copiar páginas ====
 +  - Se abren los PDFs de los que se copiarán las páginas en modo 'rb'.
 +  - Obtenemos los objetos leíbles de los documentos abiertos anteriormente con la función PyPDF2.PdfFileReader(//Objeto_pdf_abierto//)
 +  - Creamos el objeto tipo //PdfFileWriter// que creará el nuevo PDF con el método **PyPDF2.PdfFileWriter()**.
 +  - Añadimos al objeto tipo PdfFileWriter las páginas de cada PDF con la función pagina=objeto_pdf_abierto.getPage(pageNum), con **pdfWriter.addPage(pagina)**.
 +  - Para crear definitivamente el nuevo PDF, abrimos el nuevo PDF hasta ahora inexistente, con open() e indicando en el segundo argumento 'wb'. nuevoPDF = open('nuevo.pdf', 'wb')
 +  - Se pasa como argumento del método **pdfWriter.write(nuevoPDF)**, que copia al información contenida en este (páginas copiadas de los otros PDFs).
 +  - Se cierra con close() el documento creado y el resto de documentos abiertos.
 +
 +==== Rotar páginas ====
 +Del mismo modo que antes, cuando se extrae la página a copiar, se la aplica el método //pagina//**.rotateClockwise(//nº_grados_rotación//)**.
 +\\
 +Continuaría igual: Creando un nuevo PDF y escribiendo las págias rotadas.
 +
 +==== Sobreponiendo páginas ==== 
 +Útil, por ejemplo, para añadir marcas de agua.\\
 +La metodología es la misma que anteriormente: Una vez se han abierto las 2 páginas a unir, se utiliza el método **merge()** de la que va a ser "sobrepuesta" (queda debajo). primeraPagina**.mergePage(**pdfMarcaAguaReader.getPage(0)**)**
 +
 +===== Encriptación de PDFs =====
 +Una vez se le han añadido todas las páginas al objeto pdfWriter, se encripta con: pdfWriter**.encrypt(**//clave//**)**.\\
 +El método encrypt() permite tener 2 argumentos: el primero es el //user password// (sólo permite ver el PDF) y el segundo el //owner password// (permite realizar otras acciones, como por ejemplo, extraer texto). Si sólo se pasa una clave, se usa para ambos usuarios.\\
 +Después el siguiente paso es crear el PDF, como se vió anteriormente.
 +
 +
python/pdf.1649548399.txt.gz · Última modificación: por alberto

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki