python:pdf
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Próxima revisión | Revisión previa | ||
| python:pdf [2022/04/10 00:59] – creado alberto | python:pdf [2022/04/10 03:06] (actual) – [Sobreponiendo páginas] alberto | ||
|---|---|---|---|
| Línea 5: | Línea 5: | ||
| 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. | 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 PFD ===== | + | ===== 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: | ||
| + | - Importar el módulo PyPDF2. | ||
| + | - Abrimos el documento PDF con **open()**, que devuelve un objeto tipo pdfFileObj: | ||
| + | - El primer argumento es el nombre del propio documento. | ||
| + | - El segundo argumento es ' | ||
| + | - A continuación, | ||
| + | - Podemos obtener el número de páginas del documento con el atributo pdfReader**.numPages**. | ||
| + | - Para extraer el texto debemos obtener la página del texto a extraer, usando el método objetoPdfReader**.getPage()**, | ||
| + | - Con el último objeto obtenido, usamos el método objetoPageObj.**extractText()** para extrer un string con el texto completo de la página. | ||
| + | |||
| + | <code python> | ||
| + | import PyPDF2 | ||
| + | docPdf = open(' | ||
| + | docPdfLeible = PyPDF2.PdfFileReader(docPdf) | ||
| + | docPdfLeible.numpages | ||
| + | paginaPDF = docPdfLeible.getPage(3) | ||
| + | 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.\\ | ||
| + | \\ | ||
| + | - Abrir el documento y obtener el objeto que lo hace leíble: <code python> | ||
| + | docPdf = pyPDF2.PdfFileReader(open(' | ||
| + | - Para comprobar si el documento está encriptado, podemos comprobar el atributo **.isEncrypted**:< | ||
| + | - Desencriptamos con la función decrypt('// | ||
| + | - Una vez desencriptado el documento, extraemos la página.< | ||
| + | |||
| + | Debido a un //bug// en la versión 1.26.0 de PyDF2, se produce un error // | ||
| + | |||
| + | ===== 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, | ||
| + | - 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 ' | ||
| + | - Obtenemos los objetos leíbles de los documentos abiertos anteriormente con la función PyPDF2.PdfFileReader(// | ||
| + | - Creamos el objeto tipo // | ||
| + | - Añadimos al objeto tipo PdfFileWriter las páginas de cada PDF con la función pagina=objeto_pdf_abierto.getPage(pageNum), | ||
| + | - Para crear definitivamente el nuevo PDF, abrimos el nuevo PDF hasta ahora inexistente, | ||
| + | - Se pasa como argumento del método **pdfWriter.write(nuevoPDF)**, | ||
| + | - 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 // | ||
| + | \\ | ||
| + | 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: | ||
| + | |||
| + | ===== Encriptación de PDFs ===== | ||
| + | Una vez se le han añadido todas las páginas al objeto pdfWriter, se encripta con: pdfWriter**.encrypt(**// | ||
| + | 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.1649545163.txt.gz · Última modificación: por alberto
