وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

تقسیم، ادغام و چرخش اسناد PDF در پایتون با borb

0 6
زمان لازم برای مطالعه: 4 دقیقه


معرفی

را فرمت سند قابل حمل (PDF) یک نیست WYSIWYG (آنچه می بینید همان چیزی است که به دست می آورید) قالب این برای پلتفرم-آگنوستیک، مستقل از سیستم عامل اصلی و موتورهای رندر توسعه داده شد.

برای دستیابی به این هدف، PDF ساخته شد تا از طریق چیزی بیشتر شبیه به یک زبان برنامه نویسی و متکی با آن تعامل داشته باشد. روی مجموعه ای از دستورالعمل ها و عملیات برای رسیدن به نتیجه. در واقع PDF است مستقر روی یک زبان برنامه نویسی – پست اسکریپتکه اولین دستگاه مستقل بود زبان توضیحات صفحه.

در این راهنما، ما استفاده خواهیم کرد بورب – یک کتابخانه پایتون که به خواندن، دستکاری و تولید اسناد PDF اختصاص یافته است. هم یک مدل سطح پایین (که به شما امکان می‌دهد به مختصات و طرح‌بندی دقیق در صورت استفاده از آن‌ها دسترسی داشته باشید) و هم یک مدل سطح بالا (که در آن می‌توانید محاسبات دقیق حاشیه‌ها، موقعیت‌ها و غیره را به یک مدیر طرح‌بندی واگذار کنید) ارائه می‌دهد. .

در این راهنما، نگاهی به روش تقسیم و ادغام اسناد PDF در پایتون با استفاده از borb، همچنین روش چرخش صفحات در یک سند PDF را بررسی خواهیم کرد.

تقسیم و ادغام اسناد PDF اساس بسیاری از موارد استفاده است:

  • در حال پردازش یک فاکتور (شما به شرایط و ضوابط نیاز ندارید تا بتوانید آن صفحات را حذف کنید)
  • افزودن نامه پوششی به اسناد (گزارش آزمایش، فاکتور، مواد تبلیغاتی)
  • جمع آوری نتایج آزمون از منابع ناهمگن
  • و غیره.

در حال نصب بورب

بورب را می توان از منبع دانلود کرد روی GitHub، یا نصب شده از طریق pip:

$ pip install borb

تقسیم PDF با استفاده از borb

برای نشان دادن این موضوع، به یک PDF با چند صفحه نیاز دارید.
ما با ایجاد چنین PDF با استفاده از آن شروع می کنیم borb. این مرحله اختیاری است، البته می‌توانید به‌جای آن از پی‌دی‌افی که در آن قرار داده‌اید استفاده کنید:

from borb.pdf.canvas.color.color import HexColor
from borb.pdf.canvas.layout.page_layout.multi_column_layout import SingleColumnLayout
from borb.pdf.canvas.layout.page_layout.page_layout import PageLayout
from borb.pdf.canvas.layout.text.paragraph import Paragraph
from borb.pdf.document import Document
from borb.pdf.page.page import Page
from borb.pdf.pdf import PDF
from decimal import Decimal

def create_document(heading_color: HexColor = HexColor("0b3954"), 
                    text_color: HexColor = HexColor("de6449"),
                    file_name: str = "output.pdf"):

    d: Document = Document()

    N: int = 10
    for i in range(0, N):
    
        
        p: Page = Page()
        d.append_page(p)
        
        
        l: PageLayout = SingleColumnLayout(p)
        
        
        l.add(Paragraph("Page %d of %d" % (i+1, N),
                        font_color=heading_color,
                        font_size=Decimal(24)))
                        
        
        l.add(Paragraph("""
                        Lorem Ipsum is simply dummy text of the printing and typesetting industry. 
                        Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, 
                        when an unknown printer took a galley of type and scrambled it to make a type specimen book. 
                        It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. 
                        It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, 
                        and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
                        """,
                        font_color=text_color))
    
    
    with open(file_name, "wb") as pdf_out_handle:
        PDF.dumps(pdf_out_handle, d)

این کد مثال یک سند PDF متشکل از 10 صفحه ایجاد می کند:

  • هر یک page با “صفحه x از 10” شروع می شود. این کار باعث می شود که بعداً صفحات را راحت تر شناسایی کنید روی.
  • هر یک page شامل 1 پاراگراف متن
پیشنهاد می‌کنیم بخوانید:  روش انتخاب تصادفی عناصر از لیست در پایتون

تقسیم اسناد PDF در پایتون

حالا بیایید این PDF را تقسیم کنیم. با تقسیم آن به دو قسمت شروع می کنیم، نیمه اول شامل 5 صفحه اول و نیمه دوم شامل صفحات باقی مانده است:

def split_half_half():

  
  with open("output.pdf", "rb") as pdf_file_handle:
    input_pdf = PDF.loads(pdf_file_handle)

  
  output_pdf_001 = Document()
  output_pdf_002 = Document()

  
  for i in range(0, 10):
    if i < 5:
      output_pdf_001.append_page(input_pdf.get_page(i))
    else:
      output_pdf_002.append_page(input_pdf.get_page(i))

  
  with open("output_001.pdf", "wb") as pdf_out_handle:
    PDF.dumps(pdf_out_handle, output_pdf_001)

  
  with open("output_002.pdf", "wb") as pdf_out_handle:
    PDF.dumps(pdf_out_handle, output_pdf_002)

ما 5 صفحه اول را در یک صفحه جدید استخراج کرده ایم Document، و 5 صفحه زیر به یک صفحه جدید تبدیل می شود Document، به طور موثر نسخه اصلی را به دو نهاد کوچکتر تقسیم می کند.

این کار از طریق get_page() روش، به عنوان نوع بازگشت آن می تواند به طور مستقیم با استفاده از append_page().

می‌توانید پی‌دی‌اف‌های به‌دست‌آمده را بررسی کنید تا تأیید کنید که کد آن‌طور که در نظر گرفته شده است کار می‌کند:

تقسیم یک سند pdf در python
تقسیم یک سند pdf در python

اولین سند به پایان می رسد page 5، و دومی در شروع می شود page 6.

ما همچنین می توانیم آن را بر اساس تقسیم کنیم روی معیارهای دیگر نیز! در مثال بعدی، PDF را با قرار دادن تمام صفحات فرد در یک PDF و صفحات زوج در یک PDF دیگر تقسیم می کنیم:

def split_even_odd():

  
  with open("output.pdf", "rb") as pdf_file_handle:
    input_pdf = PDF.loads(pdf_file_handle)
  
  
  output_pdf_001 = Document()
  output_pdf_002 = Document()

  
  for i in range(0, 10):
    if i % 2 == 0:
      output_pdf_001.append_page(input_pdf.get_page(i))
    else:
      output_pdf_002.append_page(input_pdf.get_page(i))

  
  with open("output_001.pdf", "wb") as pdf_out_handle:
    PDF.dumps(pdf_out_handle, output_pdf_001)

  
  with open("output_002.pdf", "wb") as pdf_out_handle:
    PDF.dumps(pdf_out_handle, output_pdf_002)

می توانید تأیید کنید که اسناد PDF حاصل تقسیم فوق الذکر را نشان می دهد:

پیشنهاد می‌کنیم بخوانید:  نحوه غیرفعال کردن هشدارها در پایتون

تقسیم پی دی اف on صفحات فرد
تقسیم پی دی اف on صفحات فرد

ادغام اسناد PDF در پایتون

برای کار با نمونه های بعدی به دو فایل PDF نیاز داریم. بیایید از کد قبلی برای تولید آنها استفاده کنیم اگر قبلاً کدی ندارید:

create_document(HexColor("247B7B"), HexColor("78CDD7"), "output_001.pdf")
create_document(file_name="output_002.pdf")

شهود مورد استفاده برای تقسیم تقریباً شبیه به ادغام است – اگرچه، ما می‌توانیم کل اسناد را به اسناد دیگر اضافه کنیم، نه فقط صفحات. اگرچه، گاهی اوقات ممکن است بخواهید یک سند را تقسیم کنید (آخرین آن را قطع کنید page) قبل از ادغام آن با یکی دیگر.

ما می توانیم آنها را به طور کامل ادغام کنیم (هر دو PDF را به هم ادغام کنیم)، اما همچنین می توانیم فقط برخی از صفحات PDF اول را به دومی اضافه کنیم، اگر آن را ترجیح دهیم – با استفاده از append_page() مانند قبل عمل کند

بیایید با به هم پیوستن کامل آنها شروع کنیم:

def concatenate_two_documents():

  
  with open("output_001.pdf", "rb") as pdf_file_handle:
    input_pdf_001 = PDF.loads(pdf_file_handle)
  
  
  with open("output_002.pdf", "rb") as pdf_file_handle:
    input_pdf_002 = PDF.loads(pdf_file_handle)
  
  
  output_document = Document()
  output_document.append_document(input_pdf_001)
  output_document.append_document(input_pdf_002)
  
  
  with open("output.pdf", "wb") as pdf_out_handle:
    PDF.dumps(pdf_out_handle, output_document)

این کد باید به این نتیجه برسد:

ادغام اسناد pdf در python با بورب

چرخش صفحات در اسناد PDF در پایتون

آ page در یک سند PDF را می توان با هر مضرب 90 درجه چرخاند. این نوع عملکرد به شما امکان می دهد به راحتی بین حالت افقی و عمودی جابجا شوید.

در مثال بعدی شما a را می چرخانید page از یکی از PDF های ورودی که قبلا ایجاد کردیم:

def rotate_first_page():
  
  with open("output_001.pdf", "rb") as pdf_file_handle:
    input_pdf_001 = PDF.loads(pdf_file_handle)

  
  input_pdf_001.get_page(0).rotate_left()  
  
  
  with open("output.pdf", "wb") as pdf_out_handle:
    PDF.dumps(pdf_out_handle, input_pdf_001)

پی دی اف به دست آمده به شکل زیر است:

چرخش صفحات اسناد pdf در python

نتیجه

در این راهنما، نگاهی به روش ادغام و تقسیم اسناد PDF انداخته ایم. ما همچنین یک PDF موجود را با چرخاندن برخی از صفحات آن اصلاح کرده ایم.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-08 17:17:04

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید