Python에서 생성된 호환성 모듈을 사용하여 문서 만들기

Python에서 생성된 호환성 모듈을 사용하여 문서 만들기

Aspose.PDF FOSS for Python는 generated 호환성 서브패키지(aspose_pdf.generated)를 제공하는데, 이는 주요 API 표면의 안정적인 하위 집합을 반영합니다 — 핵심 라이프사이클 작업을 포함한 Document 클래스와 UnsignedContent/UnsignedContentAbsorber, PdfAValidateOptions/PdfAValidationResult이 포함됩니다. 이 서브패키지는 전체 기능을 갖춘 최상위 클래스를 사용하지 않고 보다 좁은 표면을 명시적으로 원하는 호출자들을 위해 존재하며, 그 클래스들은 import aspose_pdf에 의해 자동으로 임포트되지 않습니다 — 직접 aspose_pdf.generated.*에서 임포트합니다. 이 패키지는 순수 Python이며 아래 명령으로 설치됩니다.

단계별 가이드

1단계: 패키지 설치

Aspose.PDF FOSS 패키지를 설치합니다:

git clone https://github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python.git
cd Aspose-PDF-FOSS-for-Python
pip install -e .

생성된 Document를 임포트하고 확인 메시지를 출력하여 설치를 검증합니다:

import aspose_pdf
from aspose_pdf.generated.document import Document
print("aspose-pdf-foss-for-python is ready.")

단계 2: 필요한 클래스 가져오기

generated 호환성 클래스는 aspose_pdf.generated.document, aspose_pdf.generated.forms, aspose_pdf.generated.pdfa에 존재합니다 — 하위 모듈별로 명시적으로 가져오세요:

import aspose_pdf
from aspose_pdf.generated.document import Document
from aspose_pdf.generated.forms import UnsignedContent, UnsignedContentAbsorber
from aspose_pdf.generated.pdfa import PdfAValidateOptions, PdfAValidationResult

단계 3: 문서 생성 및 로드

Document(source)은(는) 소스가 제공되면 즉시 로드됩니다; 인수를 지정하지 않고 Document()을(를) 호출하면 나중에 load_from로 로드할 수 있는 빈 인스턴스를 생성합니다. 두 메서드 모두 파일 경로, bytes, 또는 바이너리 스트림을 허용합니다:

from aspose_pdf.generated.document import Document

document = Document("report.pdf")
print(f"Loaded {len(document.pages)} page(s)")

empty_doc = Document()
empty_doc.load_from("report.pdf")

단계 7: 서명되지 않은 양식 내용 추출

UnsignedContentAbsorber은(는) 디지털 서명의 일부가 아닌 페이지, 양식 필드 및 주석을 추출합니다. 추출을 실행하려면 extract()을(를) 호출하고, 실행 여부를 확인하려면 has_extracted()을(를) 호출하며, 다시 추출하지 않고 결과를 다시 가져오려면 get_extracted()을(를) 호출하세요:

from aspose_pdf.generated.forms import UnsignedContentAbsorber

absorber = UnsignedContentAbsorber()
unsigned = absorber.extract()
print(f"Unsigned pages: {len(unsigned.pages)}")
print(f"Unsigned form fields: {len(unsigned.form_fields)}")

if absorber.has_extracted():
    same_result = absorber.get_extracted()

단계 8: UnsignedContent 컨테이너를 수동으로 구축하기

UnsignedContent은(는) 또한 add_page, add_form_field, add_annotation으로 직접 채울 수 있는 단순 컨테이너입니다 — 각각은 해당하는 remove_* 메서드를 가지고 있으며, reset()는 세 컬렉션을 한 번에 모두 비웁니다:

from aspose_pdf.generated.forms import UnsignedContent

content = UnsignedContent()
content.add_page("page-1")
content.add_annotation("signature-placeholder")
print(content)  # UnsignedContent(pages=1, form_fields=0, annotations=1)

content.remove_annotation("signature-placeholder")
content.reset()

9단계: PDF/A 검증 구성 및 실행

PdfAValidateOptions은(는) 검증 실행을 위한 입력과 설정을 수집합니다. add_input(source)은(는) 입력을 등록하고, set_option(key, value)은(는) 이름이 지정된 옵션을 저장하며, get_options()은(는) 저장된 옵션의 복사본을 반환합니다. PdfAValidationResult은(는) 결과를 보관합니다 — add_error(message)은(는) 결과를 무효로 표시하고 errors에 추가하며, to_dict()은(는) is_valid와 errors를 일반 딕셔너리로 렌더링합니다:

from aspose_pdf.generated.pdfa import PdfAValidateOptions, PdfAValidationResult

options = PdfAValidateOptions()
options.add_input("report.pdf")
options.set_option("pdfa_version", "1b")
print(options.get_options())

result = PdfAValidationResult()
result.add_error("Font 'Arial' is not embedded")
print(result.is_valid)   # False
print(result.to_dict())

일반적인 문제 및 해결 방법

ImportError or AttributeError 접근할 때 aspose_pdf.generated

generated 하위 패키지는 import aspose_pdf에 의해 재내보내지 않습니다 — 예를 들어 from aspose_pdf.generated.document import Document와 같이 각 클래스를 해당 하위 모듈에서 직접 가져오세요, 단순히 import aspose_pdf만 사용한 후 aspose_pdf.generated.Document이 동작할 것으로 기대하지 마세요.

생성된 것을 혼동하는 Document 주된 것과 aspose_pdf.Document

aspose_pdf.Document(import aspose_pdf에 의해 재내보낸 최상위 클래스)는 더 넓은 인터페이스를 가지고 있습니다 — aspose_pdf.generated.document.Document가 구현하지 않은 validate_pdfa, iter_pages, redact_text와 같은 메서드를 추가합니다. 생성된 Document에 메서드가 없으면, 해당 메서드가 최상위 Document 클래스에 속하는지 확인하세요.

save() raises AsposePdfException: Cannot save a disposed document

close()/dispose()은(는) 문서의 내부 상태를 영구적으로 해제합니다 — 폐기된 Document는 이후에 저장, 최적화 또는 복구할 수 없습니다. close()을(를) 호출하기 전에 남은 모든 작업을 수행하거나, 새 Document(...) 호출로 소스에서 다시 로드하십시오.

change_passwords raises PdfSecurityException: Document is not encrypted

change_passwords은(는) 이미 암호화된 문서의 비밀번호만 교체합니다. 먼저 encrypt(password)을(를) 호출하거나, 비밀번호 변경을 시도하기 전에 document.is_encrypted를 확인하십시오.

PdfAValidationResult.add_error raises TypeError

add_error은(는) str 인수가 필요합니다. 예외 객체나 기타 오류 세부 정보를 문자열(str(error))로 변환한 후 add_error에 전달하십시오.

자주 묻는 질문

왜 aspose_pdf.generated가 메인 aspose_pdf.Document와 함께 존재합니까?

이는 해당 축소된 인터페이스에 대해 작성된 코드용 Aspose.PDF API의 더 좁고 안정적인 하위 집합을 그대로 반영합니다. 이 호환성 하위 집합을 특별히 필요로 하지 않는 새로운 코드는 일반적으로 더 많은 작업을 지원하는 최상위 aspose_pdf.Document를 사용해야 합니다 (PDF/A 변환, 페이지 반복, 텍스트 삭제 등).

UnsignedContentAbsorber.extract()가 스캔하기 위한 Document를 받습니까?

extract()는 반환된 UnsignedContent의 pages, form_fields, annotations 컬렉션을 채우는 데 사용되는 위치 인수와 키워드 인수를 받습니다 — 원하는 컬렉션을 키워드 인수(pages=, form_fields=, annotations=)로 전달하십시오.

아무것도 추출하기 전에 UnsignedContentAbsorber에 대해 reset()를 호출하면 어떻게 되나요?

이전의 추출된 결과를 모두 지웁니다. 이후 get_extracted()는 None을 반환하고, has_extracted()는 extract()가 다시 호출될 때까지 False을 반환합니다.

PdfAValidateOptions.add_input를 한 번 이상 호출할 수 있나요?

예 — 각 호출은 inputs 리스트에 또 다른 항목을 추가하고, self을 반환하므로 호출을 체인 형태로 연결할 수 있습니다: options.add_input("a.pdf").add_input("b.pdf").

생성된 Document에서 close()와 dispose()은 다릅니까?

아니요 — close()은(는) 동일한 인수로 dispose()을(를) 호출하는 직접 별칭입니다; 두 이름 모두 문서의 리소스를 해제합니다.

참조

 한국어