Python에서 문서를 로드하는 방법
Aspose.PDF FOSS for Python는 파일 경로, 원시 바이트 또는 바이너리 스트림에서 PDF를 로드하여 Document 객체에 넣으며, 이를 검사하고 조작할 수 있습니다. 이 라이브러리는 순수 Python이며 단일 명령으로 설치됩니다.
단계별 가이드
2단계: 필요한 클래스 가져오기
PDF를 로드하고 보관하기 위해 Document를 가져오고, 로드 실패 시 처리할 예외 클래스도 가져옵니다:
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) 모두 사용자 비밀번호로 암호화된 PDF에 대해 password 인수를 허용합니다:
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:) 블록을 빠져나갈 때 문서가 자동으로 닫힙니다. with 블록 밖에서 Document를 생성할 경우, 사용이 끝났을 때 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 인스턴스에서 document.load_from(pdf_bytes)를 호출하십시오.
PDF를 로드할 때 처음부터 올바른 비밀번호가 필요합니까, 아니면 먼저 확인할 수 있습니까?
is_encrypted은(는) 성공적인 로드 후에만 사용할 수 있으므로, 암호화된 PDF는 동일한 호출에서 올바른 password 인수를 사용해 열어야 합니다. 비밀번호를 인터랙티브하게 요청해야 할 경우 InvalidPasswordException를 잡으십시오.