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

سرور مجازی NVMe

یک بروشور PDF خیره کننده در پایتون با borb ایجاد کنید

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


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

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

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

در این راهنما، ما نگاهی به روش تولید یک بروشور حاوی گرافیک سفارشی (که توسط اپراتورهای PDF ارائه می شود) خواهیم انداخت.

نصب borb

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

$ pip install borb

چیزی که ما خواهیم ساخت

اغلب ساده‌تر است که طرحی بسازید، و برای آن کار کنید، به جای ساختن کور، بنابراین با خیال راحت یک بروشور را ترسیم کنید. روی یک تکه کاغذ که در اطرافتان دراز کشیده اید، و اجازه دهید این خلاقیت روی بوم جاری شود.

ما یک بروشور مانند این خواهیم ساخت تا یک محصول فرضی متعلق به یک شرکت فرضی را تبلیغ کنیم:

نمونه تصویر بروشور

ایجاد یک سند PDF با borb

ساخت یک سند PDF در borb معمولاً دو مرحله مشابه را دنبال می کند:

  • ایجاد یک خالی Document
  • ایجاد یک خالی Page و الحاق آن به Document
  • تنظیم a PageLayout روی را Page
  • اضافه کردن محتوا به PageLayout
  • تداوم Document

بیایید ببینیم که در کد چگونه به نظر می رسد:

from borb.pdf.document import Document
from borb.pdf.page.page import Page
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.pdf import PDF

def main():
  
  pdf = Document()

  
  page = Page()

  
  pdf.append_page(page)

  
  layout: PageLayout = SingleColumnLayout(page)

  
  
  
  with open("output.pdf", "wb") as pdf_file_handle:
      PDF.dumps(pdf_file_handle, pdf)
  
if __name__ == '__main__':
  main()

ایجاد یک بروشور PDF با borb

حالا که یک بوم خالی برای کار داریم، بیایید محتوای اصلی را اضافه کنیم. ما با اضافه کردن عنوان شروع می کنیم، مانند “شرکت شما”:


from borb.pdf.canvas.layout.text.paragraph import Paragraph  
from borb.pdf.canvas.color.color import HexColor  
from decimal import Decimal  
  

layout.add(
  Paragraph("Your Company", 
            font_color=HexColor("#6d64e8"), 
            font_size=Decimal(20)
    )
)

مرحله بعدی اضافه کردن کد QR و اطلاعات تماس است. به منظور ارائه آسان این محتوا در کنار هم، از یک استفاده می کنیم Table.

ما همچنین به مختصات کد QR نیاز داریم (بعداً چیز خاصی به آن اضافه خواهیم کرد روی). پس بیایید ابتدا با اعلام آن شروع کنیم:


from borb.pdf.canvas.layout.image.barcode import Barcode, BarcodeType  
from borb.pdf.canvas.layout.layout_element import LayoutElement
  

qr_code: LayoutElement = Barcode(
    data="https://www.borbpdf.com",
    width=Decimal(64),
    height=Decimal(64),
    type=BarcodeType.QR,
)

اکنون می توانیم خود را بسازیم و اضافه کنیم Table:

 
from borb.pdf.canvas.layout.table.flexible_column_width_table import FlexibleColumnWidthTable
  
layout.add(
    FlexibleColumnWidthTable(number_of_columns=2, number_of_rows=1)
    .add(qr_code)
    .add(
        Paragraph(
            """
            500 South Buena Vista Street
            Burbank CA
            91521-0991 USA
            """,
            padding_top=Decimal(12),
            respect_newlines_in_text=True,
            font_color=HexColor("#666666"),
            font_size=Decimal(10),
        )
    )
    .no_borders()
)

بیایید آن کد را اجرا کنیم و ببینیم PDF تولید شده چگونه است. به نظر من بهترین روش برای ترغیب جزئیات کوچک UX/UX است.

ایجاد یک سند pdf با borb

خوب به نظر می رسد! کد QR دقیقاً زیر نام شرکت قرار دارد، حاوی اطلاعات تماس مناسب است و در واقع اطلاعات تماسی را که ما ارائه کرده‌ایم رمزگذاری می‌کند.

در مرحله بعد یک کنترل از راه دور اضافه می کنیم رفتن به حاشیه نویسی. این فقط برای بحث PDF است “یک پیوند قابل کلیک که شما را به خارج از PDF می برد”.

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

این افزودنی ساده است، اما باعث ناوبری می شود روی پایان کاربر یک تجربه لذت بخش تر:

page.append_remote_go_to_annotation(
  qr_code.get_bounding_box(), uri="https://www.borbpdf.com"
)

افزودن اطلاعات محصول

اکنون می توانیم عنوان و زیرنویس (های) بعدی را اضافه کنیم ، مربوط به محصولی که برای ایجاد یک بروشور برای آن ایجاد می کنیم:


layout.add(
    Paragraph(
        "Productbrochure", font_color=HexColor("#283592"), font_size=Decimal(34)
    )
)


layout.add(
    Paragraph(
        "September 4th, 2021",
        font_color=HexColor("#e01b84"),
        font_size=Decimal(11),
    )
)

و به همین ترتیب ، عنوان نمای کلی محصول و برخی از متن ساختگی را اضافه خواهیم کرد:


layout.add(
    Paragraph(
        "Product Overview", font_color=HexColor("000000"), font_size=Decimal(21)
    )
)

layout.add(
   Paragraph(
        """
        Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts. 
        Separated they live in Bookmarksgrove right at the coast of the Semantics, a large language ocean. 
        A small river named Duden flows by their place and supplies it with the necessary regelialia.
        """
    )
)

layout.add(
    Paragraph(
        """
        It is a paradisematic country, in which roasted parts of sentences fly into your mouth. 
        Even the all-powerful Pointing has no control about the blind texts it is an almost unorthographic life. 
        One day however a small line of blind text by the name of Lorem Ipsum decided to leave for the far World of Grammar.
        """,
        margin_bottom=Decimal(12)
    )
)

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

وقتی این کد را اجرا کردیم ، باید چنین چیزی را بدست آوریم:

افزودن اطلاعات

در نهایت می توانیم اطلاعات محصول را اضافه کنیم. ما می توانستیم یک Image به همراه لیستی از برخی از ویژگی های محصول. بنابراین دوباره می توانیم از a استفاده کنیم Table برای رسیدن به ظاهر کنار هم

اغلب اوقات ، عنوانی بالاتر از لیست ویژگی ها وجود دارد ، بنابراین ما قصد داریم Table با 2 ستون (تصویر و ویژگی ها) و 2 ردیف (یکی برای عنوان و دیگری برای ویژگی ها).

از آنجایی که جدول نه به عنوان جدول، بلکه فقط برای دستیابی به ظاهر کنار هم استفاده می شود، ما حاشیه ای به جدول اضافه نمی کنیم:


from borb.pdf.canvas.layout.image.image import Image
from borb.pdf.canvas.layout.table.table import TableCell  
from borb.pdf.canvas.layout.table.fixed_column_width_table import FixedColumnWidthTable
from borb.pdf.canvas.layout.list.unordered_list import UnorderedList
  

layout.add(
    FixedColumnWidthTable(
        number_of_rows=2,
        number_of_columns=2,
        column_widths=(Decimal(0.3), Decimal(0.7)),
    )
    .add(
        TableCell(
            Image(
                  "https://www.att.com/catalog/en/skus/images/apple-iphone%2012-purple-450x350.png",
                width=Decimal(128),
                height=Decimal(128),
            ),
            row_span=2,
        )
    )
    .add(
        Paragraph(
            "Key Features",
            font_color=HexColor("e01b84"),
            font="Helvetica-Bold",
            padding_bottom=Decimal(10),
        )
    )
    .add(
        UnorderedList()
        .add(Paragraph("Nam aliquet ex eget felis lobortis aliquet sit amet ut risus."))
        .add(Paragraph("Maecenas sit amet odio ut erat tincidunt consectetur accumsan ut nunc."))
        .add(Paragraph("Phasellus eget magna et justo malesuada fringilla."))
        .add(Paragraph("Maecenas vitae dui ac nisi aliquam malesuada in consequat sapien."))
    )
    .no_borders()
)

دوباره، ما یک را اضافه کرده ایم padding_bottom در برخی از سلول های Table فقط برای فراهم کردن فضای اضافی PDF حاصل تقریباً تمام شده است:

یک بروشور PDF خیره کننده در پایتون با borb ایجاد کنید

آخرین مراحل باقی مانده اضافه کردن آثار هنری در گوشه سمت راست بالا و در پاورقی است.

با استفاده از شیء شکل در Borb

borb می تواند هر کدام را ارائه دهد Shape به Page. Shape نشان دهنده یک دنباله دلخواه از نقاط (نمایش داده شده به عنوان typing.Tuple(Decimal, Decimal)) همه اینها یک خط مداوم تشکیل می دهند. این بدان معنی است که شما می توانید با اشکالی که می خواهید ایجاد کنید کاملا خلاق باشید.

ما با تعریف روشی شروع می کنیم که مثلث ها و مربع ها را در گوشه سمت راست بالای صفحه نمایش می دهد. Page:


from borb.pdf.canvas.geometry.rectangle import Rectangle
from borb.pdf.canvas.layout.image.shape import Shape
from borb.pdf.page.page_size import PageSize
import typing
import random
  
  
def add_gray_artwork_upper_right_corner(page: Page) -> None:
  """
  This method will add a gray artwork of squares and triangles in the upper right corner
  of the given Page
  """
    grays: typing.List(HexColor) = (
        HexColor("A9A9A9"),
        HexColor("D3D3D3"),
        HexColor("DCDCDC"),
        HexColor("E0E0E0"),
        HexColor("E8E8E8"),
        HexColor("F0F0F0"),
    )
    ps: typing.Tuple(Decimal, Decimal) = PageSize.A4_PORTRAIT.value
    N: int = 4
    M: Decimal = Decimal(32)
    
    
    for i in range(0, N):
        x: Decimal = ps(0) - N * M + i * M
        y: Decimal = ps(1) - (i + 1) * M
        rg: HexColor = random.choice(grays)
        Shape(
            points=((x + M, y), (x + M, y + M), (x, y + M)),
            stroke_color=rg,
            fill_color=rg,
        ).layout(page, Rectangle(x, y, M, M))
        
    
    for i in range(0, N - 1):
        for j in range(0, N - 1):
            if j > i:
                continue
            x: Decimal = ps(0) - (N - 1) * M + i * M
            y: Decimal = ps(1) - (j + 1) * M
            rg: HexColor = random.choice(grays)
            Shape(
                points=((x, y), (x + M, y), (x + M, y + M), (x, y + M)),
                stroke_color=rg,
                fill_color=rg,
            ).layout(page, Rectangle(x, y, M, M))

اکنون می‌توانیم این روش را در روش اصلی فراخوانی کنیم و به PDF خود مقداری پیتزا اضافه کنیم:

یک بروشور PDF خیره کننده در پایتون با borb ایجاد کنید

به همین ترتیب، می‌توانیم برخی از گرافیک‌ها را به پایین صفحه اضافه کنیم page:

  • خطی برای جدا کردن پاورقی از محتوای اصلی page
  • یک عنصر هندسی کوچک برای متعادل کردن گرافیک هندسی در بالای صفحه page

بیایید روش دیگری برای انجام همه این کارها بنویسیم:

from borb.pdf.canvas.line_art.line_art_factory import LineArtFactory

def add_colored_artwork_bottom_right_corner(page: Page) -> None:
  """
  This method will add a blue/purple artwork of lines 
  and squares to the bottom right corner
  of the given Page
  """
    ps: typing.Tuple(Decimal, Decimal) = PageSize.A4_PORTRAIT.value
    
    
    Shape(
      points=(
          (ps(0) - 32, 40),
          (ps(0), 40),
          (ps(0), 40 + 32),
          (ps(0) - 32, 40 + 32),
      ),
      stroke_color=HexColor("d53067"),
      fill_color=HexColor("d53067"),
    ).layout(page, Rectangle(ps(0) - 32, 40, 32, 32))
    
    
    Shape(
      points=(
          (ps(0) - 64, 40),
          (ps(0) - 32, 40),
          (ps(0) - 32, 40 + 32),
          (ps(0) - 64, 40 + 32),
      ),
      stroke_color=HexColor("eb3f79"),
      fill_color=HexColor("eb3f79"),
    ).layout(page, Rectangle(ps(0) - 64, 40, 32, 32))
    
    
    Shape(
      points=(
          (ps(0) - 96, 40),
          (ps(0) - 64, 40),
          (ps(0) - 64, 40 + 32),
      ),
      stroke_color=HexColor("e01b84"),
      fill_color=HexColor("e01b84"),
    ).layout(page, Rectangle(ps(0) - 96, 40, 32, 32))
        
    
    r: Rectangle = Rectangle(Decimal(0), Decimal(32), ps(0), Decimal(8))
    Shape(
      points=LineArtFactory.rectangle(r),
      stroke_color=HexColor("283592"),
      fill_color=HexColor("283592"),
    ).layout(page, r)

باز هم می توانیم این متد را از متد main فراخوانی کنیم. نتیجه page باید شبیه این باشد:

یک بروشور PDF خیره کننده در پایتون با borb ایجاد کنید

نتیجه

در این راهنما ما نگاهی به برخی از بلوک‌های اساسی ساخت اسناد PDF با استفاده از آن انداخته‌ایم borb. ما padding و margin و همچنین اندازه فونت و رنگ فونت را پیکربندی کرده ایم. ما همچنین با استفاده از گرافیک تولید کرده ایم Shape شیء ، و یک کد QR قابل کلیک کار.

با این بلوک‌های ساختمانی، ما یک بروشور برای یک محصول فرضی یک شرکت خیالی ایجاد کرده‌ایم که به طور خودکار process ایجاد اسناد PDF تعاملی.

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



منتشر شده در 1403-01-08 11:49:06

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

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

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