Hoe een document te laden in Python
Aspose.PDF FOSS voor Python laadt een PDF van een bestandspad, ruwe bytes, of een binaire stream in een Document object dat je kunt inspecteren en manipuleren. De bibliotheek is pure Python en wordt geïnstalleerd met één enkel commando.
Stapsgewijze gids
Stap 2: Vereiste klassen importeren
Importeer Document om een PDF te laden en vast te houden, plus de exceptieklassen die je zal afhandelen wanneer een load mislukt:
from aspose_pdf import (
Document,
InvalidPasswordException,
InvalidPdfFileFormatException,
PdfCorruptedError,
PdfParseException,
)Stap 3: Laad een PDF vanaf een bestandspad
Geef een bestandspad direct door aan de Document constructor, of roep load_from expliciet aan op een bestaande instantie — beide accepteren een pad, bytes, of een binaire stream. Gebruik Document als contextmanager zodat de onderliggende bestandshandles automatisch worden vrijgegeven:
from aspose_pdf import Document
with Document("report.pdf") as document:
print(f"Loaded {document.page_count} page(s)")De constructorvorm Document(source) is equivalent aan Document().load_from(source):
document = Document()
document.load_from("report.pdf")
print(f"Loaded {document.page_count} page(s)")
document.close()Stap 4: Een wachtwoordbeveiligde PDF laden
Zowel Document(source, password=...) als Document.load_from(source, password, limits) accepteren een password-argument voor PDF’s die versleuteld zijn met een gebruikerswachtwoord:
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}")Als de bron niet met een wachtwoord is beveiligd, laat het argument weg — het doorgeven van password=None (de standaard) werkt ook voor gewone PDF’s.
Stap 5: Laaduitzonderingen afhandelen
Een ontbrekend bestand, niet-PDF-gegevens, een ontbrekend of onjuist wachtwoord, of een corrupte PDF geeft nooit stilzwijgend een lege Document terug — er wordt in plaats daarvan een uitzondering opgegooid. Vang de specifieke exceptieklassen op om gepast te reageren:
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 en zijn verwante PdfMalformedError bevatten beide de eigenschappen message, offset en recoverable, wat nuttig is om precies te loggen waar een defect bestand niet kon worden geparseerd. Bij het verwerken van onbetrouwbare invoer, vang ook PdfResourceLimitException op, die wordt opgegooid wanneer een document de standaard PdfLoadLimits veiligheidsrichtlijn overschrijdt (invoergrootte, objecttelling, gedecodeerde streamgrootte en vergelijkbare limieten).
Stap 7: Documentbronnen vrijgeven
Het gebruik van Document als contextmanager (with Document(...) as document:) sluit het document automatisch wanneer het blok wordt verlaten. Wanneer je een Document buiten een with-blok maakt, roep je close() of dispose() expliciet aan zodra je ermee klaar bent:
document = Document()
document.load_from("report.pdf")
try:
print(document.page_count)
finally:
document.close()Veelvoorkomende problemen en oplossingen
InvalidPasswordException wordt opgegeven hoewel ik niet dacht dat het bestand versleuteld was
De bron-PDF heeft een gebruikerswachtwoord ingesteld. Bevestig dit bij de herkomst van het bestand en geef vervolgens de juiste waarde door als het password-argument aan Document(...) of load_from(...).
InvalidPdfFileFormatException op een bestand dat er goed uitziet
Het bestand is geen geldige PDF — het kan een HTML-foutpagina zijn, een afgekorte download, of een ander formaat dat is opgeslagen met een .pdf-extensie. Open het bestand in een teksteditor en controleer of het begint met %PDF-.
PdfCorruptedError op een bestand dat opent in andere viewers
Sommige PDF-lezers repareren een gebroken structuur stilletjes. Document werpt PdfCorruptedError voor onherstelbare corruptie en PdfMalformedError voor herstelbare structurele problemen — inspecteer de offset eigenschap op de uitzondering om het probleemgebied in de byte-stroom te lokaliseren.
PdfResourceLimitException op een grote of complexe PDF
Het document overschreed een standaard PdfLoadLimits limiet (invoergrootte, objectaantal, gedecodeerde streamgrootte en soortgelijke limieten die zijn ontworpen om te beschermen tegen niet-vertrouwde invoer). Maak een aangepaste PdfLoadLimits en geef deze door als limits= aan Document(...) of load_from(...) als het bestand vertrouwd is en hogere limieten passend zijn.
Vergeten om een te sluiten Document geopend buiten een with block
Roep document.close() (of document.dispose()) aan zodra je klaar bent, of laad het bestand met with Document(source) as document: zodat opruimen automatisch gebeurt, zelfs als er een uitzondering optreedt binnen het blok.
Veelgestelde vragen
Wat kan ik doorgeven als het source argument bij het laden van een PDF?
Document(source) en Document.load_from(source, password, limits) accepteren een bestandspad, ruwe bytes, of een willekeurige binaire stream.
Hoe laad ik een PDF die al in het geheugen staat in plaats van op schijf?
Geef het bytes object direct door: Document(pdf_bytes), of roep document.load_from(pdf_bytes) aan op een bestaande Document instantie.
Vereist het laden van een PDF vooraf het juiste wachtwoord, of kan ik eerst controleren?
is_encrypted is alleen beschikbaar na een succesvolle load, dus een versleutelde PDF moet worden geopend met het juiste password argument in dezelfde oproep. Vang InvalidPasswordException op als je interactief om een wachtwoord moet vragen.