PyMuPDF
Biblioteca Python de código abierto para gestionar metadatos PDF
Pruebe PyMuPDF, una biblioteca de Python gratuita y de código abierto para acceder y modificar metadatos de documentos PDF.
¿Qué es PyMuPDF?
PyMuPDF, también conocida como Fitz, es una biblioteca de Python de código abierto que ofrece muchas funciones como analizar archivos PDF, dividir y fusionar archivos PDF, etc., pero en esta página solo discutiremos cómo los desarrolladores de Python pueden usar la biblioteca PyMuPDF para manejar tareas relacionadas con metadatos PDF como:
- Leer metadatos PDF: PyMuPDF admite el acceso a metadatos de documentos PDF que contienen información como autor, título, tema y fecha de creación, etc.
- Modificar metadatos PDF: La biblioteca también permite modificar metadatos de documentos PDF.
- Leer metadatos XML: los documentos PDF también contienen metadatos XML que no se limitan a las propiedades estándar del documento, como autor, título, etc., sino que pueden tener metadatos adicionales. Con PyMuPDF, los desarrolladores también pueden leerlos.
- Cambiar metadatos XML: Los desarrolladores también pueden cambiar los metadatos XML de los archivos PDF utilizando la biblioteca PyMuPDF.
Introducción a PyMuPDF
Necesita la versión 3.8.0 o superior de Python para instalar y usar PyMuPDF. Por lo tanto, primero instale Python y luego use los siguientes comandos para instalar PyMuPDF en su máquina usando pip y virtual environment.
Linux
python -m venv pymupdf-venv
. pymupdf-venv/bin/activate
pip install pymupdf
Sistema operativo Mac
python -m venv pymupdf-venv
. pymupdf-venv/bin/activate
pip install pymupdf
Ventanas
python -m venv pymupdf-venv
.\pymupdf-venv\Scripts\activate
pip install pymupdf
Leer metadatos del PDF
Podemos leer los metadatos de un PDF utilizando el miembro metadata de la biblioteca PyMuPDF, que contiene el contenido completo de metadatos del documento. El siguiente fragmento de código muestra cómo obtener los metadatos de un PDF a partir del miembro metadata:
# Import PyMuPDF library | |
import fitz | |
# Import pprint module for pretty printing | |
from pprint import pprint | |
# Open the PDF file using PyMuPDF | |
doc = fitz.open('doc.pdf') | |
# Pretty print the metadata of the opened PDF | |
pprint(doc.metadata) | |
# Close the PDF document to release resources | |
doc.close() |
Producción
La siguiente captura de pantalla muestra los metadatos recuperados de un PDF usando PyMuPDF:
Editar metadatos de PDF
Podemos editar los metadatos de los PDF usando la biblioteca PyMuPDF pasando un diccionario que contenga los campos que queremos cambiar junto con sus nuevos valores al método set_metadata como se muestra en el siguiente fragmento de código:
# Import PyMuPDF library | |
import fitz | |
# Open the PDF file | |
doc = fitz.open('documentprocessing.pdf') | |
# Define new metadata | |
new_metadata = { | |
'author': 'Document Processing', | |
'title': 'Test Document', | |
'subject': 'Test document to review document processing libraries' | |
} | |
# Set the new metadata in the document | |
doc.set_metadata(new_metadata) | |
# Save the document with the changes | |
doc.save("doc.pdf") | |
# Close the document to release resources | |
doc.close() |
Leer metadatos XML de archivos PDF
Podemos recuperar metadatos XML de un PDF utilizando la biblioteca PyMuPDF. Utilizamos el método get_xml_metadata que devuelve todos los metadatos XML como se muestra en el siguiente fragmento de código:
# Import the PyMuPDF module | |
import fitz | |
# Open the PDF file | |
doc = fitz.open("data.pdf") | |
# Print the XML metadata of the PDF document | |
print(doc.get_xml_metadata()) | |
# Close the PDF document | |
doc.close() |
Producción
La siguiente captura de pantalla muestra los metadatos XML recuperados de un PDF usando PyMuPDF:
Cambiar metadatos XML de archivos PDF
Podemos configurar o cambiar los metadatos XML de un PDF utilizando el método set_xml_metadata de la biblioteca PyMuPDF. No es tan sencillo como reemplazar los metadatos a nivel de documento porque set_xml_metadata aceptará cualquier cadena y reemplazará los metadatos XML completos con la cadena que se le pasa.
Para evitar la eliminación involuntaria de cualquier información de metadatos, primero obtenemos los metadatos XML completos como una cadena utilizando el método get_xml_metadata y luego utilizamos el método replace de cadena para reemplazar la información deseada. Finalmente, pasamos el XML completo con los campos modificados al método set_xml_metadata que cambia todos los metadatos XML del PDF. Consulte el siguiente fragmento de código para obtener más detalles:
# Import the PyMuPDF library | |
import fitz | |
# Open the PDF file | |
doc = fitz.open("documentprocessing.pdf") | |
# Get the current metadata as XML | |
xml_metadata = doc.get_xml_metadata() | |
# Update the creator field in the XML metadata | |
updated_xml_metadata = xml_metadata.replace( | |
'<rdf:li>Document</rdf:li>', | |
f'<rdf:li>Document Processing</rdf:li>' | |
) | |
# Set the updated XML metadata in the PDF document | |
doc.set_xml_metadata(updated_xml_metadata) | |
# Save the changes to a new PDF file | |
doc.save("data.pdf") | |
# Close the PDF document | |
doc.close() |
Conclusión
En resumen, PyMuPDF es una gran herramienta para tareas relacionadas con la manipulación de metadatos. Podemos recuperar y cambiar fácilmente la información de metadatos de los archivos PDF. Sin embargo, una debilidad notable radica en el método set_xml_metadata. Este método acepta cualquier cadena que se le pase y sobrescribe el XML anterior con ella, lo que puede provocar una pérdida involuntaria de información. Para evitar este problema, los desarrolladores deben implementar su lógica para garantizar modificaciones correctas en los metadatos XML.