כיצד ליצור מסמכים עם מודול ההתאמה שנוצר ב-Python

כיצד ליצור מסמכים עם מודול ההתאמה שנוצר ב-Python

Aspose.PDF FOSS עבור Python משגר חבילה משנית של תאימות בשם generated (aspose_pdf.generated) המשקפת תת-קבוצה יציבה של המשטח הראשי של API — מחלקת Document עם פעולות מחזור החיים המרכזיות, וכן UnsignedContent/UnsignedContentAbsorber ו-PdfAValidateOptions/PdfAValidationResult. היא קיימת עבור קוראים שמבקשים משטח צרים זה במפורש במקום המחלקות ברמת העל הכוללות תכונות מלאות, והמחלקות שלה אינן מיובאות אוטומטית על-ידי import aspose_pdf — עליך לייבא אותן ישירות מ-aspose_pdf.generated.*. החבילה היא Python טהורה ומותקנת באמצעות הפקודה שלהלן.

מדריך שלב-אחר-שלב

שלב 1: התקנת החבילה

התקן את חבילת Aspose.PDF FOSS:

git clone https://github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python.git
cd Aspose-PDF-FOSS-for-Python
pip install -e .

אמת את ההתקנה על-ידי ייבוא ה-Document שנוצר והדפסת הודעת אישור:

import aspose_pdf
from aspose_pdf.generated.document import Document
print("aspose-pdf-foss-for-python is ready.")

שלב 2: ייבא מחלקות נדרשות

המחלקות התאימות של generated נמצאות ב-aspose_pdf.generated.document, aspose_pdf.generated.forms ו-aspose_pdf.generated.pdfa — ייבא אותן במפורש באמצעות תת-מודול:

import aspose_pdf
from aspose_pdf.generated.document import Document
from aspose_pdf.generated.forms import UnsignedContent, UnsignedContentAbsorber
from aspose_pdf.generated.pdfa import PdfAValidateOptions, PdfAValidationResult

שלב 3: צור וטען מסמך

Document(source) נטען מיד כאשר מקור מסופק; קריאה ל-Document() ללא ארגומנט יוצרת מופע ריק שניתן לטעון מאוחר יותר עם load_from. שניהם מקבלים נתיב קובץ, bytes, או זרם בינארי:

from aspose_pdf.generated.document import Document

document = Document("report.pdf")
print(f"Loaded {len(document.pages)} page(s)")

empty_doc = Document()
empty_doc.load_from("report.pdf")

שלב 7: חילץ תוכן טופס ללא חתימה

UnsignedContentAbsorber מחלץ את העמודים, שדות הטופס וההערות שלא היו חלק מחתימה דיגיטלית. קרא ל-extract() כדי להפעיל את החילוץ, ל-has_extracted() כדי לבדוק אם הוא בוצע, ול-get_extracted() כדי לקבל את התוצאה שוב ללא חילוץ מחדש:

from aspose_pdf.generated.forms import UnsignedContentAbsorber

absorber = UnsignedContentAbsorber()
unsigned = absorber.extract()
print(f"Unsigned pages: {len(unsigned.pages)}")
print(f"Unsigned form fields: {len(unsigned.form_fields)}")

if absorber.has_extracted():
    same_result = absorber.get_extracted()

שלב 8: בניית מכולת UnsignedContent באופן ידני

UnsignedContent הוא גם מכולה פשוטה שניתן למלא בעצמך באמצעות add_page, add_form_field ו-add_annotation — לכל אחד מהם יש שיטה תואמת remove_*, ו-reset() מוחקת את שלוש האוספים בבת אחת:

from aspose_pdf.generated.forms import UnsignedContent

content = UnsignedContent()
content.add_page("page-1")
content.add_annotation("signature-placeholder")
print(content)  # UnsignedContent(pages=1, form_fields=0, annotations=1)

content.remove_annotation("signature-placeholder")
content.reset()

צעד 9: הגדר והפעל PDF/A Validation

PdfAValidateOptions אוסף את הקלטים וההגדרות לריצת אימות. add_input(source) רושם קלט, set_option(key, value) שומר אפשרות בשם, ו-get_options() מחזיר עותק של האפשרויות השמורות. PdfAValidationResult מחזיק את התוצאה — add_error(message) מסמן את התוצאה כלא תקפה ומוסיף ל-errors, ו-to_dict() מציג את is_valid ו-errors כמילון פשוט:

from aspose_pdf.generated.pdfa import PdfAValidateOptions, PdfAValidationResult

options = PdfAValidateOptions()
options.add_input("report.pdf")
options.set_option("pdfa_version", "1b")
print(options.get_options())

result = PdfAValidationResult()
result.add_error("Font 'Arial' is not embedded")
print(result.is_valid)   # False
print(result.to_dict())

בעיות נפוצות ותיקונים

ImportError or AttributeError בעת גישה aspose_pdf.generated

החבילה המשנית generated אינה מיוצאת מחדש על ידי import aspose_pdf — יש לייבא כל מחלקה ממודול המשנה הספציפי שלה, לדוגמה from aspose_pdf.generated.document import Document, במקום לצפות ש-aspose_pdf.generated.Document יעבוד אחרי import aspose_pdf פשוט.

מבלבל את שנוצר Document עם הראשי aspose_pdf.Document

aspose_pdf.Document (המחלקה ברמת העליונה המיוצאת מחדש על ידי import aspose_pdf) בעלת ממשק רחב יותר — היא מוסיפה שיטות כגון validate_pdfa, iter_pages, ו-redact_text ש-aspose_pdf.generated.document.Document אינה מממשת. אם שיטה חסרה ב-Document שנוצר, בדוק האם היא שייכת למחלקה ברמת העליונה Document במקום זאת.

save() raises AsposePdfException: Cannot save a disposed document

close()/dispose() משחרר את המצב הפנימי של המסמך לצמיתות — Document שמושלך לא ניתן לשמור, לא לבצע אופטימיזציה, ולא לתקן לאחר מכן. בצע את כל הפעולות הנותרות לפני קריאה ל-close(), או טען מחדש מהמקור עם קריאה חדשה ל-Document(...).

change_passwords raises PdfSecurityException: Document is not encrypted

change_passwords רק מסובב סיסמה על מסמך שכבר מוצפן. קרא ל-encrypt(password) תחילה, או בדוק את document.is_encrypted לפני שניסית לשנות את הסיסמה.

PdfAValidationResult.add_error raises TypeError

add_error דורש ארגומנט מסוג str. המר אובייקטי יוצאי דופן או פרטי שגיאה אחרים למחרוזת (str(error)) לפני העברתם ל-add_error.

שאלות נפוצות

מדוע aspose_pdf.generated קיים לצד aspose_pdf.Document הראשי?

זה משקף תת-קבוצה מצומצמת ויציבה של ה-Aspose.PDF API עבור קוד שנכתב כנגד המשטח המוקטת הזה. קוד חדש שאינו זקוק ספציפית לתת-קבוצת התאימות הזו צריך בדרך כלל להשתמש ב-aspose_pdf.Document ברמה העליונה, אשר תומך במבצעי יותר (המרת PDF/A, איטרציה על דפים, עריכת טקסט, ועוד).

האם UnsignedContentAbsorber.extract() מקבל Document לסריקה?

extract() מקבל ארגומנטים מיקום ומילות מפתח המשמשים למילוי האוספים pages, form_fields, ו-annotations של ה-UnsignedContent שהוחזר — העבר את האוספים שברצונך לייצג כארגומנטים של מילות מפתח (pages=, form_fields=, annotations=).

מה קורה אם אני קורא ל-reset() על UnsignedContentAbsorber לפני שמחלץ משהו?

זה מוחק כל תוצאה שהוחלצה בעבר. לאחר מכן get_extracted() מחזיר None ו-has_extracted() מחזיר False עד ש-extract() ייקרא שוב.

האם ניתן לקרוא ל-PdfAValidateOptions.add_input יותר מפעם אחת?

כן — כל קריאה מוסיפה ערך נוסף לרשימת inputs, והיא מחזירה self, ולכן ניתן לקשר קריאות: options.add_input("a.pdf").add_input("b.pdf").

האם close() שונה מ-dispose() על ה-Document שנוצר?

לא — close() הוא כינוי ישיר שקורא ל-dispose() עם אותם ארגומנטים; כל אחד מהשמות משחרר את משאבי המסמך.

ראה גם

 עברית