مقدمه
document.py، ماژولی که Aspose.PDF FOSS را برای کلاس Document Python تعریف میکند، آن را بهعنوان کلاسی توصیف میکند که «موتور PDF بومی را میپیچد». بهصورت ملموس، آن موتور aspose_pdf.engine.simple_pdf.SimplePdf است: Document.load_from یک نمونه SimplePdf میسازد و هر عملیات در سطح سند — ذخیرهسازی، بهینهسازی، تعمیر، رمزنگاری — به آن واگذار میشود. همینطور برای رندرینگ صادق است: هم Page.render و هم Document.render_page به aspose_pdf.engine.rasterizer فراخوانی میکنند.
اکثریت کدهای برنامهای نیازی به عبور از Document و Page ندارند. اما aspose_pdf.engine یک بسته معمولی و قابل ایمپورت Python است و چندین جزء زیرین این واسط بهتنهایی مفید هستند: رسترایزری که صفحه را به پیکسل تبدیل میکند، کدکهای فیلتر جریان که جریانهای محتوای PDF را فشرده و استخراج میکنند، و ابزارهای رمزنگاری که الگوریتمهای AES-CBC و RC4 را که هندلرهای امنیتی PDF به آنها وابستهاند، پیادهسازی میکنند. برخلاف بسته اصلی، زیرماژولهای aspose_pdf.engine از سطح بالای aspose_pdf مجدداً صادر نمیشوند — استثنای واحد RasterizedPage است که از طریق aspose_pdf.visualization پل میزند — بنابراین همه موارد زیر با مسیر نقطهدار کاملشان ایمپورت میشوند، برای مثال from aspose_pdf.engine.filters import StreamDecoder.
Aspose.PDF FOSS برای Python یک بسته Python است، aspose-pdf-foss-for-python، تحت مجوز MIT منتشر شده و نیاز به Python نسخه ۳.۱۱ یا بالاتر دارد. نام ماژول سطح بالای آن aspose_pdf است. بسته هستهای فقط به cryptography و asn1crypto وابسته است؛ افزودنیهای اختیاری قابلیت رمزگشایی تصویر مبتنی بر Pillow، پشتیبانی از فونت WOFF2 مبتنی بر Brotli، و چیدمان متن پیچیده مبتنی بر HarfBuzz را اضافه میکنند.
ویژگیهای کلیدی
رندر کردن صفحات با موتور رسترسازی
Document.render_page(page_index, dpi=..., scale=..., background=..., antialias=...) و همتای Page.render آن هر دو یک RasterizedPage برمیگردانند — یک رستر RGB فشرده که توسط رسترایزر موتور تولید شده است. RasterizedPage width، height و بایتهای خام pixels را در دسترس میگذارد، بهعلاوه get_pixel() برای جستجوی یک پیکسل، to_png() / to_tiff() برای بایتهای کدگذاری شده در حافظه، و save() برای نوشتن مستقیم یک فایل .png یا .tif/.tiff. کار با شیء در حافظه — بهجای صرفاً ذخیرهسازی روی دیسک — زمانی مفید است که فراخوانی میخواهد قبل از تصمیمگیری برای نگه داشتن آنها، پیکسلها را بررسی یا تبدیل کند.
from aspose_pdf import Document
with Document() as document:
page = document.pages.add()
page.add_text("Rendered by the engine", x=72, y=700, font_size=18)
raster = document.render_page(0, dpi=150)
print(raster.width, raster.height)
corner = raster.get_pixel(0, 0)
print("top-left pixel:", corner)
with open("page-0.png", "wb") as handle:
handle.write(raster.to_png())
raster.save("page-0.tiff")
موتور فیلتر جریان
محتوای PDF و جریانهای اشیاء با فیلترهای نامگذاریشدهای مانند FlateDecode و LZWDecode فشرده میشوند. aspose_pdf.engine.filters.StreamEncoder.encode(data, filters, decode_parms=None) و StreamDecoder.decode(data, filters, decode_parms, *, limits=None, max_output_bytes=None) بخشهای رمزگذاری و رمزگشایی آن زنجیره فیلتر را پیادهسازی میکنند — همان کدکهایی که موتور بهصورت داخلی هنگام نوشتن و خواندن جریانهای سند استفاده میکند. هر دو یک نام فیلتر واحد یا فهرستی برای فیلترهای زنجیرهای میپذیرند، و StreamDecoder.decode() در صورت نام فیلتر ناشناخته، PdfValidationException را بهجای بازگرداندن بایتهای نادرست بهصورت ساکت برمیانگیزد.
from aspose_pdf.engine.filters import StreamDecoder, StreamEncoder
raw = b"Sample content-stream payload.\n" * 40
compressed = StreamEncoder.encode(raw, "FlateDecode")
restored = StreamDecoder.decode(compressed, "FlateDecode", None)
assert restored == raw
print(f"{len(raw)} bytes -> {len(compressed)} bytes with FlateDecode")
موتور رمزنگاری
aspose_pdf.engine.encryption.EncryptionUtils کلاس ابزار متدهای استاتیک است که SimplePdf برای هر عملیات مرتبط با رمزنگاری به آن فراخوانی میکند: Document.encrypt، decrypt() و change_passwords() همگی به فراخوانیهای EncryptionUtils در زیرساخت تبدیل میشوند. متدهای آن AES-CBC و رمزنگاری RC4 را بهطور مستقیم پیادهسازی میکنند (encrypt_aes_cbc، decrypt_aes_cbc، encrypt_rc4، decrypt_rc4)، استخراج کلید برای نسخههای هندلر امنیتی استاندارد PDF (compute_owner_key_v4، compute_user_key_v4، compute_user_owner_keys_v6)، و generate_file_id() برای شناسه تصادفی ۱۶ بایتی که اسناد جدید به آن نیاز دارند.
from aspose_pdf.engine.encryption import EncryptionUtils
key = b"0123456789ABCDEF" # 16 bytes -> AES-128
ciphertext = EncryptionUtils.encrypt_aes_cbc(key, b"Reviewer notes: approved")
plaintext = EncryptionUtils.decrypt_aes_cbc(key, ciphertext)
assert plaintext == b"Reviewer notes: approved"
file_id = EncryptionUtils.generate_file_id()
print(file_id.hex())
شروع سریع
پکیج را نصب کنید، سپس یک صفحه را مستقیماً از لایه موتور در یک اسکریپت واحد رندر کنید.
asposefoss/pdf is not yet published — build from source until it ships. See the project README for build instructions.from aspose_pdf import Document
with Document() as document:
page = document.pages.add()
page.add_text("Engine-rendered page", x=72, y=740, font_size=20)
raster = document.render_page(0, dpi=150)
raster.save("engine-render.png")
document.save("engine-quickstart.pdf")
print("Saved engine-quickstart.pdf and engine-render.png")
فرمتهای پشتیبانیشده
| قالب | پسوند | خواندن | نوشتن |
|---|---|---|---|
| بله | بله | ||
| TIFF | tiff | - | بله |
خواندن و نوشتن PDF Aspose.PDF FOSS برای عملکرد اصلی Python است — جفت موتور Document/SimplePdf اسناد PDF را در هر مسیر کدی در این پست بارگذاری و مینویسد. Document.render_page، Page.render، و RasterizedPage.to_png() / to_tiff() علاوه بر این خروجیهای رستر PNG و TIFF تولید میکنند؛ اینها خروجیهای رستر صفحه هستند نه فرمتهای بارگذاری سند.
منبع باز و مجوزدهی
Aspose.PDF FOSS برای Python تحت مجوز MIT منتشر شده است: بدون محدودیت استفاده، بدون هزینه زمان اجرا، و بدون نیاز به ثبتنام برای استفاده تجاری یا شخصی. کد منبع در github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python میزبانی میشود، و بسته به عنوان aspose-pdf-foss-for-python در PyPI منتشر شده است.