איך לטעון מסמך ב-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 אם אתה צריך לבקש סיסמה באופן אינטראקטיבי.

ראה גם

 עברית