מבוא
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 ואת validation enums ישירות מ-aspose_pdf.security ו-aspose_pdf.validation ומייצא אותם מחדש, ולכן שני נתיבי הייבוא מתייחסים לאותו אובייקט מחלקה.
מדריך זה מכסה את כל ארבעת המודולים, והוא מפורש לגבי המקומות שבהם מחלקת generated פועלת בצורה שונה מזו של חבילת הראשית עם אותו שם — Document ו-UnsignedContentAbsorber קיימים בשני מקומות עם שני מימושים שונים, וזה בדיוק הסוג של בעיה שקל לטעות בה כאשר מייבאים רק לפי שם.
Aspose.PDF FOSS עבור Python הוא חבילה Python, aspose-pdf-foss-for-python, שפורסמה תחת רישיון MIT, ודורשת Python 3.11 או גרסה מאוחרת יותר. שם המודול ברמת העל הוא 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 שלהם הוא שקרי. הגרסה של generated.forms אינה מקבלת מסמך בכלל — extract() פשוט ארוזת כל מה ש-pages, form_fields ו-annotations שעברת כארגומנטים שמילת-מפתח לתוך מופע של UnsignedContent, מה שמועיל כאשר הפריטים ללא חתימה כבר נאספו במקום אחר ורק צריכים את המכולה המשותפת ואת המוטטורים בסגנון 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
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())
פורמטים נתמכים
| פורמט | הרחבה | קרא | כתוב |
|---|---|---|---|
| כן | כן |
קריאה וכתיבה של PDF היא Aspose.PDF FOSS עבור הפונקציה המרכזית של Python. כל מחלקה במדריך זה — 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.