مقدمه

Aspose.PDF FOSS برای Python شامل یک زیرپکیج aspose_pdf.generated با چهار ماژول است: document.py، forms.py، pdfa.py و security.py. هیچ‌کدام از آن‌ها از بسته سطح-بالای aspose_pdf بازصادرات نمی‌شوند، بنابراین هر کلاس در این راهنما با مسیر نقطه‌دار کامل خود وارد می‌شود — from aspose_pdf.generated.document import Document، نه from aspose_pdf import Document.

چهار ماژول دو رویکرد متفاوت اتخاذ می‌کنند. generated.document و generated.forms و generated.pdfa هر کدام کلاس‌های خود را تعریف می‌کنند: پیاده‌سازی‌های مستقل که شکل Document، UnsignedContent/UnsignedContentAbsorber و PdfAValidateOptions/PdfAValidationResult بسته اصلی را بازتاب می‌دهند — برای کدی که علیه این ساختار نام‌فضای آینه‌ای نوشته شده مفید است، اما مجموعه‌ای واقعی و جداگانه از کلاس‌ها هستند نه نام‌گذاری‌های مستعار. از سوی دیگر، generated.security هیچ بازپیاده‌سازی‌ای انجام نمی‌دهد: CompromiseCheckResult، SignaturesCompromiseDetector و enumهای اعتبارسنجی را مستقیماً از aspose_pdf.security و aspose_pdf.validation وارد می‌کند و بازصادرات می‌کند، بنابراین هر دو مسیر واردات به شیء کلاس یکسان منجر می‌شوند.

این راهنما تمام چهار مورد را پوشش می‌دهد و به‌طور صریح توضیح می‌دهد که در کجا یک کلاس generated رفتار متفاوتی نسبت به همتای بسته-اصلی با همان نام دارد — Document و UnsignedContentAbsorber هر دو در دو مکان با دو پیاده‌سازی متفاوت وجود دارند، که دقیقاً همان نوع مشکلی است که هنگام وارد کردن فقط بر پایه نام به سادگی می‌توان آن را اشتباه گرفت.

Aspose.PDF FOSS برای Python یک بسته Python، aspose-pdf-foss-for-python، است که تحت مجوز MIT منتشر شده و نیاز به Python نسخه ۳.۱۱ یا بالاتر دارد. نام ماژول سطح-بالای آن aspose_pdf است؛ برای نصب بخش «شروع سریع» زیر را ببینید. بستهٔ هسته‌ای فقط به cryptography و asn1crypto وابسته است؛ افزونه‌های اختیاری پشتیبانی از رمزگشایی تصویر مبتنی بر Pillow، پشتیبانی از فونت WOFF2 مبتنی بر Brotli، و چینش متن پیچیده مبتنی بر HarfBuzz را اضافه می‌کند.


ویژگی‌های کلیدی

یک پیاده‌سازی سند دوم

aspose_pdf.generated.document.Document همان چرخهٔ اصلی را همانند aspose_pdf.Document اصلی پیاده‌سازی می‌کند — load_from()، save()، encrypt()/decrypt()/change_passwords()، optimize()/optimize_resources()، repair()، flatten() و validate()/check() — بر پایهٔ موتور aspose_pdf.engine.simple_pdf.SimplePdf یکسان. این یک زیرمجموعه از Document اصلی را بازتاب می‌دهد: فاقد نویسندگی صفحه به سبک pages.add()، فاقد form/outlines/attachments و فاقد render_page() است. چون نام کلاس با Document بستهٔ اصلی تداخل دارد، هنگام نیاز به هر دو در یک ماژول، آن را با یک نام مستعار وارد کنید.

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()

بسته‌بندی محتوای بدون امضا

aspose_pdf.generated.forms.UnsignedContentAbsorber و UnsignedContent یک محفظه برای فیلدهای فرم، صفحات و حاشیه‌نویسی‌های بدون امضا فراهم می‌کنند. این متفاوت از aspose_pdf.UnsignedContentAbsorber(document) سطح بالا است که یک Document واقعی می‌گیرد و form_fields/annotations آن را برای مواردی که ویژگی is_signed/signed آن‌ها نادرست (falsy) باشد فیلتر می‌کند. نسخهٔ generated.forms هیچ سندی نمی‌گیرد — extract() به سادگی هر چیزی که pages، form_fields و annotations به عنوان آرگومان‌های کلیدی به آن پاس می‌دهید، در یک نمونهٔ UnsignedContent بسته‌بندی می‌کند، که زمانی مفید است که اقلام بدون امضا از پیش در جای دیگری جمع‌آوری شده باشند و فقط به محفظهٔ مشترک و add_page()/remove_page()-style mutators آن نیاز داشته باشند.

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 گزینه‌های اعتبارسنجی و نتایج

aspose_pdf.generated.pdfa.PdfAValidateOptions تنظیمات اعتبارسنجی و منابع ورودی را جمع‌آوری می‌کند؛ PdfAValidationResult نتیجه را جمع‌آوری می‌کند. PdfAValidateOptions.add_input() مسیر رشته‌ای را با Path.exists() قبل از پذیرش بررسی می‌کند و اگر فایل موجود نباشد PdfIOException را پرتاب می‌کند، به‌طوری که فراخواننده بلافاصله از مسیر ورودی نادرست مطلع می‌شود نه در زمان اعتبارسنجی.

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())

انواع امنیت و اعتبارسنجی صادر شده مجدد

aspose_pdf.generated.security CompromiseCheckResult و SignaturesCompromiseDetector را مستقیماً از aspose_pdf.security وارد می‌کند، و CertificationLevel، RevocationStatus، TrustStatus، ValidationMethod، ValidationMode، ValidationOptions، ValidationResult و ValidationStatus را از aspose_pdf.validation. بر خلاف Document و UnsignedContentAbsorber، در اینجا پیاده‌سازی مستقل وجود ندارد — هر دو مسیر واردات یک شیء یکسان را برمی‌گردانند.

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)

شروع سریع

پکیج را نصب کنید، سپس یک سند با Document اصلی بسازید، آن را ذخیره کنید، و آن را از طریق گزینه‌های generated.pdfa و اشیای نتیجه اجرا کنید.

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())

قالب‌های پشتیبانی‌شده

قالبپسوندخواندننوشتن
PDFpdfبلهبله

خواندن و نوشتن PDF برای عملکرد اصلی Python Aspose.PDF FOSS است. هر کلاس در این راهنما — Document اصلی، آینه generated.document.Document، و کمک‌کننده‌های PDF/A — بر ورودی و خروجی PDF از طریق موتور مشترک SimplePdf عمل می‌کند؛ aspose_pdf.generated کلاس وارد شده را تغییر می‌دهد، نه فرمت فایلی که پردازش می‌شود.


منبع باز و مجوزدهی

Aspose.PDF FOSS برای Python تحت مجوز MIT منتشر شده است: بدون محدودیت استفاده، بدون هزینه زمان اجرا، و بدون نیاز به ثبت‌نام برای استفاده تجاری یا شخصی. کد منبع در github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python میزبانی می‌شود، و پکیج در PyPI به عنوان aspose-pdf-foss-for-python منتشر شده است.


شروع کار

منابع مرتبط