Cómo cargar un documento en Python
Aspose.PDF FOSS para Python carga un PDF desde una ruta de archivo, bytes sin procesar o un flujo binario en un objeto Document que puedes inspeccionar y manipular. La biblioteca es pura Python y se instala con un solo comando.
Guía paso a paso
Paso 2: Importar clases requeridas
Importa Document para cargar y mantener un PDF, además de las clases de excepción que manejarás cuando una carga falle:
from aspose_pdf import (
Document,
InvalidPasswordException,
InvalidPdfFileFormatException,
PdfCorruptedError,
PdfParseException,
)Paso 3: Cargar un PDF desde una ruta de archivo
Pasa una ruta de archivo directamente al constructor de Document, o llama a load_from explícitamente sobre una instancia existente — ambos aceptan una ruta, bytes, o un flujo binario. Usa Document como gestor de contexto para que los manejadores de archivo subyacentes se liberen automáticamente:
from aspose_pdf import Document
with Document("report.pdf") as document:
print(f"Loaded {document.page_count} page(s)")La forma de constructor Document(source) es equivalente a Document().load_from(source):
document = Document()
document.load_from("report.pdf")
print(f"Loaded {document.page_count} page(s)")
document.close()Paso 4: Cargar un PDF protegido con contraseña
Tanto Document(source, password=...) como Document.load_from(source, password, limits) aceptan un argumento password para PDFs cifrados con una contraseña de usuario:
from aspose_pdf import Document
with Document("locked.pdf", password="secret") as document:
print(f"Opened encrypted document: {document.page_count} page(s)")
print(f"Encrypted: {document.is_encrypted}")Si la fuente no está protegida con contraseña, omita el argumento — pasar password=None (el predeterminado) funciona también para PDFs ordinarios.
Paso 5: Gestionar excepciones de carga
Un archivo inexistente, datos que no son PDF, una contraseña ausente o incorrecta, o un PDF dañado nunca devuelven un Document silenciosamente vacío — en su lugar lanza una excepción. Capture las clases de excepción específicas para reaccionar adecuadamente:
from aspose_pdf import (
Document,
InvalidPasswordException,
InvalidPdfFileFormatException,
PdfCorruptedError,
PdfParseException,
)
try:
document = Document("report.pdf", password="maybe-wrong")
except InvalidPasswordException:
print("The PDF is encrypted; supply the correct password.")
except InvalidPdfFileFormatException:
print("The file is not a valid PDF.")
except PdfCorruptedError as error:
print(f"Unrecoverable corruption at offset {error.offset}: {error.message}")
except PdfParseException as error:
print(f"Could not parse the PDF: {error}")
else:
print(f"Loaded {document.page_count} page(s)")
document.close()PdfCorruptedError y su hermano PdfMalformedError ambos poseen las propiedades message, offset y recoverable, lo cual es útil para registrar exactamente dónde falló al analizar un archivo corrupto. Al procesar entrada no confiable, también capture PdfResourceLimitException, que se lanza cuando un documento excedería la política de seguridad predeterminada PdfLoadLimits (tamaño de entrada, recuento de objetos, tamaño de flujo decodificado y límites similares).
Paso 7: Liberar los recursos del documento
Usar Document como administrador de contexto (with Document(...) as document:) cierra el documento automáticamente cuando el bloque finaliza. Cuando construyas un Document fuera de un bloque with, llama a close() o dispose() explícitamente una vez que hayas terminado con él:
document = Document()
document.load_from("report.pdf")
try:
print(document.page_count)
finally:
document.close()Problemas comunes y soluciones
InvalidPasswordException se produce aunque no pensé que el archivo estuviera cifrado
El PDF de origen tiene una contraseña de usuario establecida. Confirma esto con el origen del archivo, luego pasa el valor correcto como argumento password a Document(...) o load_from(...).
InvalidPdfFileFormatException en un archivo que parece estar bien
El archivo no es un PDF válido — puede ser una página de error HTML, una descarga truncada o un formato diferente guardado con una extensión .pdf. Abre el archivo en un editor de texto y confirma que comienza con %PDF-.
PdfCorruptedError en un archivo que se abre en otros visores
Algunos lectores de PDF reparan la estructura dañada silenciosamente. Document genera PdfCorruptedError para corrupción irrecuperable y PdfMalformedError para problemas estructurales recuperables — inspeccione la propiedad offset en la excepción para localizar el área problemática en el flujo de bytes.
PdfResourceLimitException en un PDF grande o complejo
El documento superó el límite predeterminado de PdfLoadLimits (tamaño de entrada, recuento de objetos, tamaño del flujo decodificado y límites similares diseñados para proteger contra entradas no confiables). Construya un PdfLoadLimits personalizado y páselo como limits= a Document(...) o load_from(...) si el archivo es de confianza y se requieren límites mayores.
Olvidarse de cerrar un Document abierto fuera de un with block
Llame a document.close() (o document.dispose()) una vez que haya terminado, o cargue el archivo con with Document(source) as document: para que la limpieza se realice automáticamente incluso si ocurre una excepción dentro del bloque.
Preguntas frecuentes
¿Qué puedo pasar como argumento source al cargar un PDF?
Document(source) y Document.load_from(source, password, limits) aceptan una ruta de archivo, bytes sin procesar, o cualquier flujo binario.
¿Cómo cargar un PDF que ya está en memoria en lugar de en disco?
Pase el objeto bytes directamente: Document(pdf_bytes), o llame a document.load_from(pdf_bytes) en una instancia existente de Document.
¿Cargar un PDF requiere la contraseña correcta de antemano, o puedo comprobar primero?
is_encrypted solo está disponible después de una carga exitosa, por lo que un PDF encriptado debe abrirse con el argumento password correcto en la misma llamada. Catch InvalidPasswordException si necesita solicitar una contraseña de forma interactiva.