הקדמה

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 3.11 או גרסה מאוחרת יותר. שם המודול ברמת העליון הוא 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() עבור מזהה האקראי של 16 בתים שהמסמכים החדשים זקוקים לו.

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

פורמטים נתמכים

פורמטהרחבהקריאהכתיבה
PDFpdfכןכן
TIFFtiff-כן

קריאת וכתיבת 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, והחבילה מתפרסמת ב-PyPI כ-aspose-pdf-foss-for-python.


התחלה

משאבים קשורים