วิธีโหลดเอกสารใน Python

วิธีโหลดเอกสารใน 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 หากคุณต้องการให้มีการถามรหัสผ่านแบบโต้ตอบ.

ดูเพิ่มเติม

 ภาษาไทย