Jak załadować dokument w Python

Jak załadować dokument w Python

Aspose.PDF FOSS dla Python ładuje PDF z ścieżki pliku, surowych bajtów lub strumienia binarnego do obiektu Document, który możesz przeglądać i modyfikować. Biblioteka jest czystym Python i instaluje się jednym poleceniem.

Przewodnik krok po kroku

Krok 2: Importuj wymagane klasy

Importuj Document, aby załadować i przechowywać PDF, oraz klasy wyjątków, które będziesz obsługiwać, gdy ładowanie się nie powiedzie:

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

Krok 3: Załaduj PDF ze ścieżki pliku

Przekaż ścieżkę pliku bezpośrednio do konstruktora Document lub wywołaj load_from explicite na istniejącej instancji — oba akceptują ścieżkę, bytes lub strumień binarny. Użyj Document jako menedżera kontekstu, aby uchwyty plików były zwalniane automatycznie:

from aspose_pdf import Document

with Document("report.pdf") as document:
    print(f"Loaded {document.page_count} page(s)")

Forma konstruktora Document(source) jest równoważna Document().load_from(source):

document = Document()
document.load_from("report.pdf")
print(f"Loaded {document.page_count} page(s)")
document.close()

Krok 4: Wczytaj PDF zabezpieczony hasłem

Zarówno Document(source, password=...), jak i Document.load_from(source, password, limits) akceptują argument password dla PDF-ów zaszyfrowanych hasłem użytkownika:

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}")

Jeśli źródło nie jest zabezpieczone hasłem, pomiń ten argument — przekazanie password=None (wartość domyślna) działa również dla zwykłych PDF-ów.


Krok 5: Obsługa wyjątków podczas ładowania

Brakujący plik, dane nie-PDF, brak lub nieprawidłowe hasło, albo uszkodzony PDF nigdy nie zwraca cicho pustego Document — zamiast tego zgłasza wyjątek. Przechwyć konkretne klasy wyjątków, aby odpowiednio zareagować:

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 i jego brat PdfMalformedError posiadają zarówno właściwości message, offset i recoverable, co jest przydatne do logowania dokładnie, gdzie uszkodzony plik nie udało się sparsować. Przy przetwarzaniu niepewnego wejścia, przechwyć także PdfResourceLimitException, które jest zgłaszane, gdy dokument przekracza domyślną politykę bezpieczeństwa PdfLoadLimits (rozmiar wejścia, liczba obiektów, rozmiar zdekodowanego strumienia i podobne limity).


Krok 7: Zwolnij zasoby dokumentu

Używanie Document jako menedżera kontekstu (with Document(...) as document:) automatycznie zamyka dokument po wyjściu z bloku. Gdy tworzysz Document poza blokiem with, wywołaj close() lub dispose() jawnie, gdy skończysz z nim pracę:

document = Document()
document.load_from("report.pdf")
try:
    print(document.page_count)
finally:
    document.close()

Typowe problemy i rozwiązania

InvalidPasswordException jest zgłaszany, mimo że nie sądziłem, że plik był zaszyfrowany

W źródłowym pliku PDF ustawiono hasło użytkownika. Potwierdź to u źródła pliku, a następnie przekaż prawidłową wartość jako argument password do Document(...) lub load_from(...).

InvalidPdfFileFormatException na pliku, który wygląda dobrze

Plik nie jest prawidłowym PDF — może to być strona błędu HTML, ściągnięcie ucięte lub inny format zapisany z rozszerzeniem .pdf. Otwórz plik w edytorze tekstu i potwierdź, że zaczyna się od %PDF-.

PdfCorruptedError na pliku, który otwiera się w innych przeglądarkach

Niektóre czytniki PDF naprawiają uszkodzoną strukturę po cichu. Document zgłasza PdfCorruptedError w przypadku nieodwracalnej korupcji i PdfMalformedError w przypadku możliwych do naprawy problemów strukturalnych — sprawdź właściwość offset w wyjątku, aby zlokalizować obszar problemu w strumieniu bajtów.

PdfResourceLimitException na dużym lub złożonym pliku PDF

Dokument przekroczył domyślne ograniczenie PdfLoadLimits (rozmiar wejścia, liczba obiektów, rozmiar zdekodowanego strumienia i podobne limity mające chronić przed niepewnym wejściem). Utwórz własny PdfLoadLimits i przekaż go jako limits= do Document(...) lub load_from(...), jeśli plik jest zaufany i odpowiednie są większe limity.

Zapomnienie zamknięcia a Document otwarty poza a with block

Wywołaj document.close() (lub document.dispose()) po zakończeniu, lub wczytaj plik przy użyciu with Document(source) as document:, aby sprzątanie odbywało się automatycznie, nawet jeśli w bloku wystąpi wyjątek.

Najczęściej zadawane pytania

Co mogę przekazać jako argument source przy wczytywaniu PDF?

Document(source) i Document.load_from(source, password, limits) przyjmują ścieżkę do pliku, surowy bytes lub dowolny strumień binarny.

Jak załadować plik PDF, który już znajduje się w pamięci, zamiast na dysku?

Przekaż obiekt bytes bezpośrednio: Document(pdf_bytes), lub wywołaj document.load_from(pdf_bytes) na istniejącej instancji Document.

Czy ładowanie pliku PDF wymaga podania poprawnego hasła od razu, czy mogę najpierw sprawdzić?

is_encrypted jest dostępny dopiero po pomyślnym załadowaniu, więc zaszyfrowany PDF musi być otwarty z poprawnym argumentem password w tym samym wywołaniu. Przechwyć InvalidPasswordException, jeśli musisz interaktywnie poprosić o hasło.

Zobacz także

 Polski