Come caricare un documento in Python
Aspose.PDF FOSS per Python carica un PDF da un percorso file, byte grezzi o un flusso binario in un oggetto Document che puoi ispezionare e manipolare. La libreria è puramente Python e si installa con un unico comando.
Guida passo passo
Passo 2: Importa le classi richieste
Importa Document per caricare e contenere un PDF, più le classi di eccezione che gestirai quando un caricamento fallisce:
from aspose_pdf import (
Document,
InvalidPasswordException,
InvalidPdfFileFormatException,
PdfCorruptedError,
PdfParseException,
)Passo 3: Carica un PDF da un percorso file
Passa un percorso file direttamente al costruttore Document, o chiama load_from esplicitamente su un’istanza esistente — entrambi accettano un percorso, bytes, o un flusso binario. Usa Document come gestore di contesto così i handle dei file sottostanti vengono rilasciati automaticamente:
from aspose_pdf import Document
with Document("report.pdf") as document:
print(f"Loaded {document.page_count} page(s)")La forma costruttore Document(source) è equivalente a Document().load_from(source):
document = Document()
document.load_from("report.pdf")
print(f"Loaded {document.page_count} page(s)")
document.close()Passo 4: Carica un PDF protetto da password
Sia Document(source, password=...) che Document.load_from(source, password, limits) accettano un argomento password per i PDF crittografati con una password utente:
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}")Se l’origine non è protetta da password, ometti l’argomento — passare password=None (il valore predefinito) funziona anche per i PDF ordinari.
Passo 5: Gestisci le eccezioni di caricamento
Un file mancante, dati non PDF, una password mancante o errata, o un PDF corrotto non restituiscono mai un Document silenziosamente vuoto — generano invece un’eccezione. Cattura le classi di eccezione specifiche per reagire in modo appropriato:
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 e il suo fratello PdfMalformedError contengono entrambi le proprietà message, offset e recoverable, il che è utile per registrare esattamente dove un file danneggiato ha fallito il parsing. Quando si elaborano input non attendibili, cattura anche PdfResourceLimitException, che viene sollevato quando un documento supera la politica di sicurezza predefinita PdfLoadLimits (dimensione dell’input, conteggio degli oggetti, dimensione del flusso decodificato e limiti simili).
Passo 7: Rilascia le risorse del documento
Usare Document come gestore di contesto (with Document(...) as document:) chiude automaticamente il documento quando il blocco termina. Quando si crea un Document al di fuori di un blocco with, chiamare esplicitamente close() o dispose() una volta terminato.
document = Document()
document.load_from("report.pdf")
try:
print(document.page_count)
finally:
document.close()Problemi comuni e soluzioni
InvalidPasswordException viene generato anche se non pensavo che il file fosse crittografato
Il PDF di origine ha impostata una password utente. Conferma questo con la provenienza del file, poi passa il valore corretto come argomento password a Document(...) o load_from(...).
InvalidPdfFileFormatException su un file che sembra a posto
Il file non è un PDF valido — potrebbe essere una pagina di errore HTML, un download troncato, o un formato diverso salvato con un’estensione .pdf. Apri il file in un editor di testo e verifica che inizi con %PDF-.
PdfCorruptedError su un file che si apre in altri visualizzatori
Alcuni lettori PDF riparano la struttura danneggiata in modo silenzioso. Document genera PdfCorruptedError per corruzioni non recuperabili e PdfMalformedError per problemi strutturali recuperabili — ispeziona la proprietà offset sull’eccezione per individuare l’area problematica nel flusso di byte.
PdfResourceLimitException su un PDF grande o complesso
Il documento ha superato un limite predefinito di PdfLoadLimits (dimensione dell’input, conteggio degli oggetti, dimensione del flusso decodificato e limiti simili progettati per proteggere da input non affidabili). Costruisci un PdfLoadLimits personalizzato e passalo come limits= a Document(...) o load_from(...) se il file è attendibile e limiti più ampi sono appropriati.
Dimenticare di chiudere un Document aperto al di fuori di un with block
Chiama document.close() (o document.dispose()) una volta terminato, oppure carica il file con with Document(source) as document: così la pulizia avviene automaticamente anche se si verifica un’eccezione all’interno del blocco.
Domande Frequenti
Cosa posso passare come argomento source durante il caricamento di un PDF?
Document(source) e Document.load_from(source, password, limits) accettano un percorso file, bytes grezzo o qualsiasi flusso binario.
Come carico un PDF che è già in memoria invece che su disco?
Passa direttamente l’oggetto bytes: Document(pdf_bytes), oppure chiama document.load_from(pdf_bytes) su un’istanza Document esistente.
Il caricamento di un PDF richiede la password corretta fin dall’inizio, o posso verificare prima?
is_encrypted è disponibile solo dopo un caricamento riuscito, quindi un PDF crittografato deve essere aperto con l’argomento password corretto nella stessa chiamata. Cattura InvalidPasswordException se devi richiedere una password in modo interattivo.