วิธีโหลดเอกสารใน Python
Aspose.PDF FOSS สำหรับ Python โหลด PDF จากเส้นทางไฟล์, ไบต์ดิบ, หรือสตรีมไบนารีเข้าสู่วัตถุ Document ที่คุณสามารถตรวจสอบและจัดการได้ ไลบรารีนี้เป็น Python แท้และติดตั้งด้วยคำสั่งเดียว.
คู่มือแบบขั้นตอนต่อขั้นตอน
ขั้นตอนที่ 2: นำเข้าคลาสที่จำเป็น
นำเข้า Document เพื่อโหลดและเก็บ PDF, พร้อมกับคลาสข้อยกเว้นที่คุณจะจัดการเมื่อการโหลดล้มเหลว:
from aspose_pdf import (
Document,
InvalidPasswordException,
InvalidPdfFileFormatException,
PdfCorruptedError,
PdfParseException,
)ขั้นตอนที่ 3: โหลด PDF จากเส้นทางไฟล์
ส่งเส้นทางไฟล์โดยตรงไปยังคอนสตรัคเตอร์ของ Document, หรือเรียก load_from อย่างชัดเจนบนอินสแตนซ์ที่มีอยู่ — ทั้งสองรับเส้นทาง, bytes, หรือสตรีมไบนารี ใช้ Document เป็นตัวจัดการบริบทเพื่อให้ตัวจัดการไฟล์พื้นฐานถูกปล่อยโดยอัตโนมัติ:
from aspose_pdf import Document
with Document("report.pdf") as document:
print(f"Loaded {document.page_count} page(s)")รูปแบบคอนสตรัคเตอร์ Document(source) เทียบเท่ากับ Document().load_from(source):
document = Document()
document.load_from("report.pdf")
print(f"Loaded {document.page_count} page(s)")
document.close()ขั้นตอนที่ 4: โหลด PDF ที่มีการป้องกันด้วยรหัสผ่าน
ทั้ง Document(source, password=...) และ Document.load_from(source, password, limits) ยอมรับอาร์กิวเมนต์ password สำหรับ PDF ที่เข้ารหัสด้วยรหัสผ่านผู้ใช้:
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}")หากแหล่งข้อมูลไม่ได้รับการป้องกันด้วยรหัสผ่าน ให้ละเว้นอาร์กิวเมนต์ — การส่ง password=None (ค่าเริ่มต้น) จะทำงานกับ PDF ปกติเช่นกัน.
ขั้นตอนที่ 5: จัดการข้อยกเว้นในการโหลด
ไฟล์ที่หาย, ข้อมูลที่ไม่ใช่ PDF, รหัสผ่านที่หายหรือผิด, หรือ PDF ที่เสียหาย จะไม่คืนค่า Document ที่ว่างเปล่าโดยเงียบ ๆ — จะโยนข้อยกเว้นแทน จับคลาสข้อยกเว้นเฉพาะเพื่อทำการตอบสนองอย่างเหมาะสม:
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 และพี่น้อง PdfMalformedError ทั้งสองมีคุณสมบัติ message, offset, และ recoverable ซึ่งเป็นประโยชน์สำหรับการบันทึกว่ามีการพาร์สไฟล์ที่เสียหายที่ตำแหน่งใด เมื่อประมวลผลอินพุตที่ไม่เชื่อถือได้ ควรจับ PdfResourceLimitException ด้วย ซึ่งจะถูกโยนเมื่อเอกสารเกินนโยบายความปลอดภัย PdfLoadLimits เริ่มต้น (ขนาดอินพุต, จำนวนออบเจ็กต์, ขนาดสตรีมที่ถอดรหัส, และขอบเขตที่คล้ายกัน).
ขั้นตอนที่ 7: ปล่อยทรัพยากรของเอกสาร
การใช้ Document เป็นตัวจัดการบริบท (with Document(...) as document:) จะปิดเอกสารโดยอัตโนมัติเมื่อบล็อกสิ้นสุดลง เมื่อคุณสร้าง Document นอกบล็อก with ให้เรียกใช้ close() หรือ dispose() อย่างชัดเจนเมื่อคุณทำงานเสร็จแล้ว:
document = Document()
document.load_from("report.pdf")
try:
print(document.page_count)
finally:
document.close()ปัญหาทั่วไปและวิธีแก้ไข
InvalidPasswordException ถูกยกขึ้นแม้ว่าฉันไม่คิดว่าไฟล์จะถูกเข้ารหัส
PDF ต้นฉบับมีการตั้งรหัสผ่านผู้ใช้ ตรวจสอบสิ่งนี้กับที่มาของไฟล์ แล้วส่งค่าที่ถูกต้องเป็นอาร์กิวเมนต์ password ให้กับ Document(...) หรือ load_from(...).
InvalidPdfFileFormatException บนไฟล์ที่ดูปกติ
ไฟล์นี้ไม่ใช่ PDF ที่ถูกต้อง — อาจเป็นหน้าแสดงข้อผิดพลาด HTML, การดาวน์โหลดที่ตัดขาด, หรือรูปแบบอื่นที่บันทึกด้วยนามสกุล .pdf. เปิดไฟล์ในโปรแกรมแก้ไขข้อความและยืนยันว่ามันเริ่มต้นด้วย %PDF-.
PdfCorruptedError บนไฟล์ที่เปิดได้ในโปรแกรมดูอื่น
โปรแกรมอ่าน PDF บางตัวซ่อมแซมโครงสร้างที่เสียหายโดยไม่แจ้งผู้ใช้ Document จะโยน PdfCorruptedError สำหรับความเสียหายที่ไม่สามารถกู้คืนได้และ PdfMalformedError สำหรับปัญหาโครงสร้างที่สามารถกู้คืนได้ — ตรวจสอบคุณสมบัติ offset ของข้อยกเว้นเพื่อระบุตำแหน่งปัญหาในสตรีมไบต์.
PdfResourceLimitException บน PDF ขนาดใหญ่หรือซับซ้อน
เอกสารเกินขอบเขต PdfLoadLimits เริ่มต้น (ขนาดอินพุต, จำนวนอ็อบเจกต์, ขนาดสตรีมที่ถอดรหัส, และขีดจำกัดคล้ายกันที่ออกแบบเพื่อป้องกันข้อมูลที่ไม่ได้รับความเชื่อถือ) สร้าง PdfLoadLimits แบบกำหนดเองและส่งเป็น limits= ไปยัง Document(...) หรือ load_from(...) หากไฟล์เชื่อถือได้และต้องการขีดจำกัดที่สูงขึ้น.
ลืมปิด Document เปิดนอก with block
เรียก document.close() (หรือ document.dispose()) เมื่อเสร็จสิ้น, หรือโหลดไฟล์ด้วย with Document(source) as document: เพื่อให้ทำความสะอาดโดยอัตโนมัติแม้จะเกิดข้อยกเว้นภายในบล็อก.
คำถามที่พบบ่อย
ฉันสามารถส่งอะไรเป็นอากิวเมนต์ source เมื่อโหลด PDF?
Document(source) และ Document.load_from(source, password, limits) ยอมรับเส้นทางไฟล์, bytes ดิบ, หรือสตรีมไบนารีใด ๆ.
ฉันจะโหลด PDF ที่อยู่ในหน่วยความจำแล้วแทนที่จะอยู่บนดิสก์อย่างไร?
ส่งผ่านอ็อบเจ็กต์ bytes โดยตรง: Document(pdf_bytes), หรือเรียก document.load_from(pdf_bytes) บนอินสแตนซ์ Document ที่มีอยู่แล้ว.
การโหลด PDF จำเป็นต้องใส่รหัสผ่านที่ถูกต้องตั้งแต่แรกหรือฉันสามารถตรวจสอบก่อนได้?
is_encrypted มีให้ใช้ได้หลังจากการโหลดสำเร็จเท่านั้น, ดังนั้น PDF ที่เข้ารหัสต้องเปิดด้วยอาร์กิวเมนต์ password ที่ถูกต้องในคำเรียกเดียวกัน. ดักจับ InvalidPasswordException หากคุณต้องการให้มีการถามรหัสผ่านแบบโต้ตอบ.