מבוא
איחוד חשבוניות הוא תהליך עבודה המשלב מספר מסמכים פיננסיים לקובץ PDF יחיד באמצעות GroupDocs.Merger for Python. צוותי הפיננסים לעיתים קרובות צריכים לשלוח חשבונית יחד עם תעודות משלוח, דוחות שירות ותנאי אחריות, אך חיבור קבצים ידני גורם לטעויות ובזבוז זמן. GroupDocs.Merger מאחד את התהליך, מבטיח שכל קובץ מצורף בסדר הנכון, ניתן לאבטח באופן אופציונלי, ונמסר כ‑PDF נקי אחד.
בהדרכה זו תראו כיצד:
- למזג חשבונית PDF פשוטה עם כל מספר של קבצים נלווים.
- להתמודד עם פורמטים מעורבים כגון תמונות JPG והסכמי DOCX.
- לפתוח חשבונית מוגנת בסיסמה, להוסיף קבצים מצורפים וליישם הצפנה מחדש.
- לכלול רק דפים נבחרים מצרופות גדולות כדי לשמור על חבילה סופית קומפקטית.
נתקלתי בתרחיש מדויק זה ברבעון האחרון כאשר מערכת החשבונות שלנו ייצרה חשבונית מוגנת בסיסמה והצוות המשפטי הוסיף קובץ DOCX של אחריות מרובה דפים. הקוד שלהלן פתר זאת בפחות מחמש דקות.
מתי זה הגיוני למזג חשבונית מוגנת בסיסמה עם מסמכים אחרים?
חברות רבות מצפינות חשבוניות במנוחה כדי לעמוד בדרישות ציות. כאשר יש לשלוח את החשבונית ללקוח יחד עם קבצים מצורפים שאינם מוגנים (קבלות, תנאים, תמונות), יש להסיר את הסיסמה המקורית לפני המיזוג ולאחר מכן להחיל אותה מחדש על החבילה הסופית. GroupDocs.Merger מאפשרת לספק את סיסמת הפתיחה דרך LoadOptions, להצטרף לקבצים הנוספים, ולבסוף להגן על קובץ ה‑PDF הממוזג באמצעות AddPasswordOptions. כך נשמרת רמת הסודיות תוך אספקת מסמך יחיד וקל לפתיחה.
דרישות מוקדמות
- Python 3.8+ (דרך גשר .NET)
- GroupDocs.Merger for Python – התקנה עם:
pip install groupdocs-merger
- קובץ PDF של חשבונית ראשית (
invoice.pdf) ורשימת נתיבי קבצים מצורפים. - (אופציונלי) סיסמאות לחשבונית המקורית ול‑PDF הפלט.
שלב 1: איחוד בסיסי של קבצי PDF מצורפים
המקרה הפשוט ביותר הוא מיזוג חשבונית PDF עם קבצי PDF אחרים, תמונות או קבצי Word. ה‑API ממיר אוטומטית קלטים שאינם PDF ל‑PDF לפני ההצטרפות.
import groupdocs_merger as gm
# Paths to source files
invoice = "invoice.pdf"
attachments = ["delivery_note.pdf", "service_report.pdf"]
output = "billing_package.pdf"
with gm.Merger(invoice) as merger:
for path in attachments:
merger.join(path) # Normalises each file to PDF and appends it
merger.save(output)
נקודות מפתח:
gm.Mergerנוצר עם המסמך הראשי (החשבונית).join()מקבל כל פורמט נתמך; הספרייה מטפלת בהמרה.save()כותב את קובץ ה‑PDF הממוזג לנתיב שצוין.
שלב 2: איחוד קבצים בפורמטים מעורבים
חבילות חשבוניות בעולם האמיתי כוללות לעיתים תמונות סרוקות (JPG) והסכמים משפטיים (DOCX). הקוד זהה עובד מכיוון ש‑GroupDocs.Merger מנרמל כל קובץ מצורף ל‑PDF בזמן אמת.
attachments = ["receipt.jpg", "warranty_terms.docx", "extra_clause.pdf"]
output = "billing_mixed.pdf"
with gm.Merger(invoice) as merger:
for path in attachments:
merger.join(path) # JPG and DOCX are converted to PDF automatically
merger.save(output)
למה זה חשוב: המרת כל הקבצים ל‑PDF מבטלת את הצורך שהמקבל יסתכל במגוון מציגים, ומספק חוויה חלקה.
שלב 3: טיפול בחשבוניות מוגנות בסיסמה
אם החשבונית מוצפנת, יש לספק את הסיסמה דרך LoadOptions. לאחר המיזוג ניתן להחיל סיסמה חדשה על קובץ ה‑PDF הסופי באמצעות AddPasswordOptions.
import io
invoice_password = "Inv$2026"
output_password = "Bill$2026"
load_options = gm.domain.options.LoadOptions(invoice_password)
buffer = io.BytesIO()
# Open the protected invoice, join attachments, write to memory buffer
with gm.Merger(invoice, load_options) as merger:
for path in attachments:
merger.join(path)
merger.save(buffer)
# Re‑secure the merged document
add_pwd = gm.domain.options.AddPasswordOptions(output_password)
buffer.seek(0)
with gm.Merger(buffer) as merger:
merger.add_password(add_pwd)
merger.save(output)
נקודות מפתח:
LoadOptionsפותחת את קובץ ה‑PDF המקורי.- תוצאת המיזוג נכתבת תחילה ל‑stream בזיכרון (
BytesIO). AddPasswordOptionsמיישמת סיסמה חדשה לקובץ הסופי.
שלב 4: בחירת דפים ספציפיים מצרופות
לפעמים רק חלק מצרופה רלוונטי (לדוגמה, שני העמודים הראשונים של דוח שירות ארוך). השתמשו ב‑PageJoinOptions כדי לציין טווח כולל מבוסס 1‑based.
page_picks = [
("service_report.pdf", 1, 2), # Include pages 1‑2 only
("terms_and_conditions.pdf", 3, 3) # Include only page 3
]
output = "billing_selected_pages.pdf"
with gm.Merger(invoice) as merger:
for path, first, last in page_picks:
options = gm.domain.options.PageJoinOptions(first, last)
merger.join(path, options)
merger.save(output)
תוצאה: קובץ ה‑PDF הסופי מכיל את החשבונית ועוד רק את הדפים שנבחרו, מה שמקנה לחבילה משקל קל.
דוגמה מלאה
הדוגמה המלאה, כולל כל קבצי המקור והמסמכים לדוגמה, זמינה ב‑GitHub: billing-consolidator-demo-using-groupdocs-merger-python.
שיטות עבודה מומלצות & טיפים
- ביצועים: עבור קבוצות גדולות, אפשרו רק את האפשרויות הדרושות (למשל, הימנעו מהמרות פורמט מיותרות).
- ניהול זיכרון: השתמשו תמיד ב‑
withכדי להבטיח שה‑Merger משחרר משאבים במועד. - אבטחה: החילו הצפנה מחדש לאחר המיזוג כדי לשמור על סודיות החשבונית המקורית.
- מגבלות קבצים: GroupDocs.Merger תומך בקבצי PDF עד 2 GB; קבצים גדולים יותר עשויים לדרוש פיצול לפני המיזוג.
סיכום
GroupDocs.Merger for Python מספקת API פשוטה להפיכת סט של מסמכי חשבוניות מפוזרים לחבילה מקצועית של PDF יחיד. בין אם אתם מתמודדים עם PDF פשוטים, מדיה מעורבת, חשבוניות מוגנות בסיסמה, או צריכים לחתוך צירופים לדפים חיוניים בלבד, הספרייה מבצעת את העבודה הכבדה במעט