نحوه بارگذاری یک سند در Python

نحوه بارگذاری یک سند در Python

Aspose.PDF FOSS برای Python یک PDF را از مسیر فایل، بایت‌های خام یا یک جریان باینری به یک شیء Document که می‌توانید بررسی و دستکاری کنید، بارگذاری می‌کند. این کتابخانه کاملاً Python است و با یک فرمان واحد نصب می‌شود.

راهنمای قدم به قدم

مرحله ۲: وارد کردن کلاس‌های مورد نیاز

وارد کردن Document برای بارگذاری و نگهداری یک PDF، به علاوه کلاس‌های استثنا که هنگام شکست بارگذاری باید آن‌ها را مدیریت کنید:

from aspose_pdf import (
    Document,
    InvalidPasswordException,
    InvalidPdfFileFormatException,
    PdfCorruptedError,
    PdfParseException,
)

مرحله ۳: بارگذاری یک 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()

مرحله ۴: بارگذاری یک 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های عادی نیز کار می‌کند.


مرحله ۵: مدیریت استثناهای بارگذاری

فایل گم‌شده، داده غیر 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 (اندازه ورودی، تعداد اشیاء، اندازه جریان رمزگشایی‌شده و محدودیت‌های مشابه) عبور کند.


مرحله ۷: آزادسازی منابع سند

استفاده از 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: بارگذاری کنید تا پاک‌سازی به‌صورت خودکار انجام شود حتی اگر استثنایی در داخل بلوک رخ دهد.

سوالات متداول

در هنگام بارگذاری یک PDF، می‌توانم چه چیزی را به عنوان آرگومان source پاس دهم؟

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 را بگیرید.

همچنین ببینید:

 فارسی