Wie man ein Dokument in Python lädt
Aspose.PDF FOSS für Python lädt ein PDF von einem Dateipfad, rohen Bytes oder einem binären Stream in ein Document-Objekt, das Sie inspizieren und manipulieren können. Die Bibliothek ist reines Python und wird mit einem einzigen Befehl installiert.
Schritt-für-Schritt-Anleitung
Schritt 2: Erforderliche Klassen importieren
Importieren Sie Document, um ein PDF zu laden und zu halten, plus die Ausnahmeklassen, die Sie behandeln werden, wenn ein Ladevorgang fehlschlägt:
from aspose_pdf import (
Document,
InvalidPasswordException,
InvalidPdfFileFormatException,
PdfCorruptedError,
PdfParseException,
)Schritt 3: Laden Sie ein PDF von einem Dateipfad
Übergeben Sie einen Dateipfad direkt an den Document-Konstruktor oder rufen Sie load_from explizit auf einer bestehenden Instanz auf – beide akzeptieren einen Pfad, bytes oder einen binären Stream. Verwenden Sie Document als Kontextmanager, damit die zugrunde liegenden Dateihandles automatisch freigegeben werden:
from aspose_pdf import Document
with Document("report.pdf") as document:
print(f"Loaded {document.page_count} page(s)")Die Konstruktor-Form Document(source) ist äquivalent zu Document().load_from(source):
document = Document()
document.load_from("report.pdf")
print(f"Loaded {document.page_count} page(s)")
document.close()Schritt 4: Ein passwortgeschütztes PDF laden
Sowohl Document(source, password=...) als auch Document.load_from(source, password, limits) akzeptieren ein password-Argument für PDFs, die mit einem Benutzerpasswort verschlüsselt sind:
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}")Ist die Quelle nicht passwortgeschützt, lassen Sie das Argument weg—das Übergeben von password=None (dem Standard) funktioniert auch für gewöhnliche PDFs.
Schritt 5: Ladeausnahmen behandeln
Eine fehlende Datei, Nicht-PDF-Daten, ein fehlendes oder falsches Passwort oder ein beschädigtes PDF liefert niemals ein stillschweigend leeres Document—es wird stattdessen eine Ausnahme ausgelöst. Fangen Sie die spezifischen Ausnahmeklassen, um angemessen zu reagieren:
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 und sein Geschwister PdfMalformedError besitzen beide die Eigenschaften message, offset und recoverable, was nützlich ist, um genau zu protokollieren, wo eine fehlerhafte Datei das Parsen fehlgeschlagen ist. Beim Verarbeiten von nicht vertrauenswürdigen Eingaben sollten Sie außerdem PdfResourceLimitException abfangen, das ausgelöst wird, wenn ein Dokument die standardmäßige PdfLoadLimits-Sicherheitsrichtlinie (Eingabegröße, Objektanzahl, dekodierte Streamgröße und ähnliche Grenzen) überschreiten würde.
Schritt 7: Dokumentressourcen freigeben
Die Verwendung von Document als Kontextmanager (with Document(...) as document:) schließt das Dokument automatisch, wenn der Block verlassen wird. Wenn Sie ein Document außerhalb eines with-Blocks erstellen, rufen Sie close() oder dispose() explizit auf, sobald Sie damit fertig sind:
document = Document()
document.load_from("report.pdf")
try:
print(document.page_count)
finally:
document.close()Häufige Probleme und Lösungen
InvalidPasswordException wird ausgelöst, obwohl ich nicht dachte, dass die Datei verschlüsselt ist
Das Quell-PDF hat ein Benutzerpasswort gesetzt. Bestätigen Sie dies mit der Herkunft der Datei und übergeben Sie dann den korrekten Wert als password-Argument an Document(...) oder load_from(...).
InvalidPdfFileFormatException bei einer Datei, die in Ordnung zu sein scheint
Die Datei ist kein gültiges PDF — sie könnte eine HTML-Fehlerseite, ein abgeschnittener Download oder ein anderes Format sein, das mit einer .pdf-Erweiterung gespeichert wurde. Öffnen Sie die Datei in einem Texteditor und prüfen Sie, ob sie mit %PDF- beginnt.
PdfCorruptedError bei einer Datei, die sich in anderen Betrachtern öffnet
Einige PDF-Reader reparieren beschädigte Strukturen stillschweigend. Document wirft PdfCorruptedError bei nicht wiederherstellbarer Korruption und PdfMalformedError bei wiederherstellbaren strukturellen Problemen — prüfen Sie die offset-Eigenschaft der Ausnahme, um den Problem-Bereich im Bytestrom zu finden.
PdfResourceLimitException bei einer großen oder komplexen PDF
Das Dokument überschritt die standardmäßige PdfLoadLimits-Grenze (Eingabegröße, Objektanzahl, dekodierte Stream-Größe und ähnliche Beschränkungen, die zum Schutz vor nicht vertrauenswürdigen Eingaben dienen). Erstellen Sie ein benutzerdefiniertes PdfLoadLimits und übergeben Sie es als limits= an Document(...) oder load_from(...), falls die Datei vertrauenswürdig ist und höhere Grenzen angemessen sind.
Vergessen, ein(e) zu schließen Document außerhalb eines geöffnet with block
Rufen Sie document.close() (oder document.dispose()) auf, sobald Sie fertig sind, oder laden Sie die Datei mit with Document(source) as document:, damit die Bereinigung automatisch erfolgt, selbst wenn innerhalb des Blocks eine Ausnahme auftritt.
Häufig gestellte Fragen
Was kann ich als source-Argument beim Laden einer PDF übergeben?
Document(source) und Document.load_from(source, password, limits) akzeptieren einen Dateipfad, rohes bytes oder irgendeinen Binär-Stream.
Wie lade ich ein PDF, das bereits im Speicher ist, anstatt von der Festplatte?
Übergeben Sie das bytes-Objekt direkt: Document(pdf_bytes), oder rufen Sie document.load_from(pdf_bytes) bei einer vorhandenen Document-Instanz auf.
Erfordert das Laden eines PDFs das korrekte Passwort im Voraus, oder kann ich zuerst prüfen?
is_encrypted ist nur nach einem erfolgreichen Laden verfügbar, daher muss ein verschlüsseltes PDF mit dem richtigen password-Argument im selben Aufruf geöffnet werden. Fangen Sie InvalidPasswordException, falls Sie interaktiv nach einem Passwort fragen müssen.