Як завантажити документ у 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, якщо потрібно запитати пароль інтерактивно.

Дивіться також

 Українська