Giới thiệu
Aspose.PDF FOSS cho Python bao gồm một gói con aspose_pdf.generated với bốn mô-đun: document.py, forms.py, pdfa.py và security.py. Không có mô-đun nào được xuất lại từ gói cấp cao nhất aspose_pdf, vì vậy mọi lớp trong hướng dẫn này được nhập bằng đường dẫn có dấu chấm đầy đủ — from aspose_pdf.generated.document import Document, chứ không phải from aspose_pdf import Document.
Bốn mô-đun áp dụng hai cách tiếp cận khác nhau. generated.document, generated.forms và generated.pdfa mỗi đều định nghĩa các lớp riêng của mình: các triển khai độc lập phản chiếu cấu trúc của Document, UnsignedContent/UnsignedContentAbsorber, và PdfAValidateOptions/PdfAValidationResult trong gói chính — hữu ích cho mã được viết dựa trên bố cục không gian tên được phản chiếu này, nhưng là một tập hợp lớp thực sự, riêng biệt thay vì các bí danh. Ngược lại, generated.security không thực hiện bất kỳ việc tái triển khai nào: nó nhập CompromiseCheckResult, SignaturesCompromiseDetector và các enum xác thực trực tiếp từ aspose_pdf.security và aspose_pdf.validation và xuất lại chúng, vì vậy cả hai đường dẫn nhập đều trỏ tới cùng một đối tượng lớp.
Hướng dẫn này bao gồm tất cả bốn mô-đun, và nêu rõ nơi mà lớp generated hoạt động khác biệt so với phiên bản trong gói chính cùng tên — Document và UnsignedContentAbsorber đều tồn tại ở hai vị trí với hai triển khai khác nhau, điều này chính là loại vấn đề dễ bị nhầm lẫn khi chỉ nhập theo tên.
Aspose.PDF FOSS cho Python là một gói Python, aspose-pdf-foss-for-python, được phát hành dưới giấy phép MIT, yêu cầu Python 3.11 trở lên. Tên mô-đun cấp cao nhất của nó là aspose_pdf; xem phần Bắt đầu nhanh bên dưới để cài đặt. Gói lõi chỉ phụ thuộc vào cryptography và asn1crypto; các thành phần tùy chọn bổ sung khả năng giải mã ảnh dựa trên Pillow, hỗ trợ phông chữ WOFF2 dựa trên Brotli, và bố cục văn bản phức tạp dựa trên HarfBuzz.
Các tính năng chính
Triển khai Tài liệu Thứ Hai
aspose_pdf.generated.document.Document thực hiện cùng vòng đời lõi như aspose_pdf.Document chính — load_from(), save(), encrypt()/decrypt()/change_passwords(), optimize()/optimize_resources(), repair(), flatten(), và validate()/check() — dựa trên cùng một engine aspose_pdf.engine.simple_pdf.SimplePdf. Nó phản chiếu một phần của Document chính: không có việc tạo trang kiểu pages.add(), không có form/outlines/attachments, và không có render_page(). Vì tên lớp trùng với Document của gói chính, hãy nhập nó dưới một bí danh khi cả hai đều cần trong cùng một mô-đun.
from aspose_pdf import Document
from aspose_pdf.generated.document import Document as CompatDocument
with Document() as document:
document.pages.add()
document.save("source.pdf")
compat = CompatDocument()
compat.load_from("source.pdf")
print(compat.page_count, compat.is_encrypted)
compat.optimize(compress_images=True)
compat.save("optimized.pdf", overwrite=True)
compat.dispose()
Đóng gói nội dung chưa ký
aspose_pdf.generated.forms.UnsignedContentAbsorber và UnsignedContent cung cấp một container cho các trường biểu mẫu, trang và chú thích chưa ký. Điều này khác với aspose_pdf.UnsignedContentAbsorber(document) cấp cao nhất, vốn nhận một Document thực và lọc form_fields/annotations của nó để tìm các mục có thuộc tính is_signed/signed là falsy. Phiên bản generated.forms không nhận bất kỳ tài liệu nào — extract() chỉ đơn giản đóng gói bất kỳ pages, form_fields, và annotations nào bạn truyền vào dưới dạng đối số từ khóa vào một instance UnsignedContent, điều này hữu ích khi các mục chưa ký đã được thu thập ở nơi khác và chỉ cần container chung cùng các mutator kiểu add_page()/remove_page().
from aspose_pdf.generated.forms import UnsignedContentAbsorber
absorber = UnsignedContentAbsorber()
content = absorber.extract(
form_fields=["signature_field", "initials_field"],
annotations=["review_stamp"],
)
print(absorber.has_extracted(), content.form_fields, content.annotations)
content.add_page("page-1")
absorber.reset()
print(absorber.get_extracted())
PDF/A Tùy chọn và Kết quả Xác thực
aspose_pdf.generated.pdfa.PdfAValidateOptions thu thập các cài đặt xác thực và nguồn đầu vào; PdfAValidationResult thu thập kết quả. PdfAValidateOptions.add_input() kiểm tra một đường dẫn dạng chuỗi bằng Path.exists() trước khi chấp nhận và ném PdfIOException nếu tệp tin bị thiếu, vì vậy người gọi sẽ biết ngay về đường dẫn đầu vào không hợp lệ thay vì chờ đến thời điểm xác thực.
from aspose_pdf import Document
from aspose_pdf.exceptions import PdfIOException
from aspose_pdf.generated.pdfa import PdfAValidateOptions, PdfAValidationResult
with Document() as document:
document.pages.add()
document.save("candidate.pdf")
options = PdfAValidateOptions()
options.set_option("pdfa_version", "PDF/A-2b")
options.add_input("candidate.pdf")
print(options.get_options(), options.inputs)
try:
options.add_input("missing.pdf")
except PdfIOException as error:
print(f"rejected: {error}")
result = PdfAValidationResult()
result.add_error("Missing /OutputIntent for PDF/A-2b")
print(result.is_valid, result.to_dict())
Các Kiểu Bảo Mật và Xác Thực Được Xuất Lại
aspose_pdf.generated.security nhập CompromiseCheckResult và SignaturesCompromiseDetector trực tiếp từ aspose_pdf.security, và CertificationLevel, RevocationStatus, TrustStatus, ValidationMethod, ValidationMode, ValidationOptions, ValidationResult, và ValidationStatus từ aspose_pdf.validation. Không giống như Document và UnsignedContentAbsorber, ở đây không có việc tái triển khai độc lập — cả hai đường dẫn nhập đều trả về cùng một đối tượng.
from aspose_pdf.generated.security import SignaturesCompromiseDetector
from aspose_pdf.security import SignaturesCompromiseDetector as CanonicalDetector
assert SignaturesCompromiseDetector is CanonicalDetector
detector = SignaturesCompromiseDetector(document=None)
result = detector.check()
print(result.compromised, result.reasons)
Bắt đầu nhanh
Cài đặt gói, sau đó xây dựng tài liệu với Document chính, lưu lại, và chạy qua các tùy chọn generated.pdfa và các đối tượng kết quả.
git clone https://github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python.git
cd Aspose-PDF-FOSS-for-Python
pip install -e .from aspose_pdf import Document
from aspose_pdf.generated.pdfa import PdfAValidateOptions, PdfAValidationResult
with Document() as document:
page = document.pages.add()
page.add_text("PDF/A candidate", x=72, y=740, font_size=20)
document.save("candidate.pdf")
options = PdfAValidateOptions()
options.set_option("pdfa_version", "PDF/A-2b")
options.add_input("candidate.pdf")
result = PdfAValidationResult()
if not options.inputs:
result.add_error("No inputs registered")
print(result.to_dict())
Các Định Dạng Được Hỗ Trợ
| Định dạng | Phần mở rộng | Đọc | Ghi |
|---|---|---|---|
| Có | Có |
PDF đọc và ghi là Aspose.PDF FOSS cho chức năng lõi của Python. Mỗi lớp trong hướng dẫn này — Document chính, bản sao generated.document.Document, và các tiện ích PDF/A — hoạt động trên đầu vào và đầu ra PDF thông qua động cơ SimplePdf chung; aspose_pdf.generated thay đổi lớp bạn nhập, không phải định dạng tệp đang được xử lý.
Mã Nguồn Mở & Bản Quyền
Aspose.PDF FOSS cho Python được phát hành dưới giấy phép MIT: không hạn chế sử dụng, không phí chạy thời gian, và không yêu cầu đăng ký cho việc sử dụng thương mại hoặc cá nhân. Mã nguồn được lưu trữ tại github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python, và gói được công bố trên PyPI với tên aspose-pdf-foss-for-python.