Skip to content

ਟਿਊਟੋਰੀਅਲ

ਮੈਥਡਾਂ ਦੀ ਪੂਰੀ ਡਾਕੂਮੈਂਟੇਸ਼ਨ: fpdf.FPDF API ਡੌਕ

ਟਿਊਟੋ 1 - ਸਭ ਤੋਂ ਸਧਾਰਨ ਉਦਾਹਰਨ

ਆਓ ਕਲਾਸਿਕ ਉਦਾਹਰਨ ਨਾਲ ਸ਼ੁਰੂ ਕਰੀਏ:

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font("helvetica", style="B", size=16)
pdf.cell(40, 10, "Hello World!")
pdf.output("tuto1.pdf")

ਨਤੀਜਾ PDF

ਲਾਇਬ੍ਰੇਰੀ ਫਾਈਲ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨ ਤੋਂ ਬਾਅਦ, ਅਸੀਂ ਇੱਕ FPDF ਆਬਜੈਕਟ ਬਣਾਉਂਦੇ ਹਾਂ। FPDF ਕੰਸਟਰਕਟਰ ਇੱਥੇ ਡਿਫਾਲਟ ਵੈਲਿਊਜ਼ ਨਾਲ ਵਰਤਿਆ ਗਿਆ ਹੈ: ਪੰਨੇ A4 ਪੋਰਟਰੇਟ ਵਿੱਚ ਹਨ ਅਤੇ ਮਾਪ ਦੀ ਇਕਾਈ ਮਿਲੀਮੀਟਰ ਹੈ। ਇਸ ਨੂੰ ਸਪੱਸ਼ਟ ਤੌਰ 'ਤੇ ਇਸ ਤਰ੍ਹਾਂ ਨਿਰਧਾਰਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਸੀ:

pdf = FPDF(orientation="P", unit="mm", format="A4")

PDF ਨੂੰ ਲੈਂਡਸਕੇਪ ਮੋਡ (L) ਵਿੱਚ ਸੈੱਟ ਕਰਨਾ ਜਾਂ ਹੋਰ ਪੰਨਾ ਫਾਰਮੈਟ (ਜਿਵੇਂ ਕਿ Letter ਅਤੇ Legal) ਅਤੇ ਮਾਪ ਇਕਾਈਆਂ (pt, cm, in) ਵਰਤਣਾ ਸੰਭਵ ਹੈ।

ਇਸ ਵੇਲੇ ਕੋਈ ਪੰਨਾ ਨਹੀਂ ਹੈ, ਇਸ ਲਈ ਸਾਨੂੰ add_page ਨਾਲ ਇੱਕ ਜੋੜਨਾ ਪਵੇਗਾ। ਮੂਲ ਬਿੰਦੂ ਉੱਪਰ-ਖੱਬੇ ਕੋਨੇ ਵਿੱਚ ਹੈ ਅਤੇ ਮੌਜੂਦਾ ਸਥਿਤੀ ਡਿਫਾਲਟ ਤੌਰ 'ਤੇ ਬਾਰਡਰਾਂ ਤੋਂ 1 ਸੈਂਟੀਮੀਟਰ ਦੂਰ ਰੱਖੀ ਜਾਂਦੀ ਹੈ; ਮਾਰਜਿਨ ਨੂੰ set_margins ਨਾਲ ਬਦਲਿਆ ਜਾ ਸਕਦਾ ਹੈ।

ਟੈਕਸਟ ਪ੍ਰਿੰਟ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ, set_font ਨਾਲ ਫੌਂਟ ਚੁਣਨਾ ਲਾਜ਼ਮੀ ਹੈ, ਨਹੀਂ ਤਾਂ ਡੌਕੂਮੈਂਟ ਅਵੈਧ ਹੋਵੇਗਾ। ਅਸੀਂ Helvetica ਬੋਲਡ 16 ਚੁਣਦੇ ਹਾਂ:

pdf.set_font('Helvetica', style='B', size=16)

ਅਸੀਂ I ਨਾਲ ਇਟੈਲਿਕ, U ਨਾਲ ਅੰਡਰਲਾਈਨ ਜਾਂ ਖਾਲੀ ਸਟ੍ਰਿੰਗ ਨਾਲ ਰੈਗੂਲਰ ਫੌਂਟ ਨਿਰਧਾਰਤ ਕਰ ਸਕਦੇ ਸੀ (ਜਾਂ ਕੋਈ ਵੀ ਕੰਬੀਨੇਸ਼ਨ)। ਨੋਟ ਕਰੋ ਕਿ ਫੌਂਟ ਸਾਈਜ਼ ਪੁਆਇੰਟਸ ਵਿੱਚ ਦਿੱਤਾ ਗਿਆ ਹੈ, ਮਿਲੀਮੀਟਰ (ਜਾਂ ਹੋਰ ਯੂਜ਼ਰ ਯੂਨਿਟ) ਵਿੱਚ ਨਹੀਂ; ਇਹ ਇੱਕੋ ਇੱਕ ਅਪਵਾਦ ਹੈ। ਹੋਰ ਬਿਲਟ-ਇਨ ਫੌਂਟ ਹਨ Times, Courier, Symbol ਅਤੇ ZapfDingbats

ਅਸੀਂ ਹੁਣ cell ਨਾਲ ਇੱਕ ਸੈੱਲ ਪ੍ਰਿੰਟ ਕਰ ਸਕਦੇ ਹਾਂ। ਸੈੱਲ ਇੱਕ ਆਇਤਾਕਾਰ ਖੇਤਰ ਹੈ, ਸੰਭਵ ਤੌਰ 'ਤੇ ਫਰੇਮ ਵਾਲਾ, ਜਿਸ ਵਿੱਚ ਕੁਝ ਟੈਕਸਟ ਹੁੰਦਾ ਹੈ। ਇਹ ਮੌਜੂਦਾ ਸਥਿਤੀ 'ਤੇ ਰੈਂਡਰ ਹੁੰਦਾ ਹੈ। ਅਸੀਂ ਇਸ ਦੇ ਅਕਾਰ, ਟੈਕਸਟ (ਕੇਂਦਰਿਤ ਜਾਂ ਅਲਾਈਨ), ਬਾਰਡਰ ਖਿੱਚਣੇ ਹਨ ਜਾਂ ਨਹੀਂ, ਅਤੇ ਮੌਜੂਦਾ ਸਥਿਤੀ ਇਸ ਤੋਂ ਬਾਅਦ ਕਿੱਥੇ ਜਾਂਦੀ ਹੈ (ਸੱਜੇ, ਹੇਠਾਂ ਜਾਂ ਅਗਲੀ ਲਾਈਨ ਦੀ ਸ਼ੁਰੂਆਤ 'ਤੇ) ਨਿਰਧਾਰਤ ਕਰਦੇ ਹਾਂ। ਫਰੇਮ ਜੋੜਨ ਲਈ, ਅਸੀਂ ਇਹ ਕਰਾਂਗੇ:

pdf.cell(40, 10, 'Hello World!', 1)

ਇਸ ਦੇ ਨਾਲ ਕੇਂਦਰਿਤ ਟੈਕਸਟ ਨਾਲ ਨਵਾਂ ਸੈੱਲ ਜੋੜਨ ਅਤੇ ਅਗਲੀ ਲਾਈਨ 'ਤੇ ਜਾਣ ਲਈ, ਅਸੀਂ ਇਹ ਕਰਾਂਗੇ:

pdf.cell(60, 10, 'Powered by FPDF.', new_x="LMARGIN", new_y="NEXT", align='C')

ਨੋਟ: ਲਾਈਨ ਬ੍ਰੇਕ ln ਨਾਲ ਵੀ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ। ਇਹ ਮੈਥਡ ਬ੍ਰੇਕ ਦੀ ਉਚਾਈ ਵੀ ਨਿਰਧਾਰਤ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।

ਅਖੀਰ ਵਿੱਚ, ਡੌਕੂਮੈਂਟ ਬੰਦ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ ਦਿੱਤੇ ਫਾਈਲ ਪਾਥ ਅਧੀਨ output ਨਾਲ ਸੇਵ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਬਿਨਾਂ ਕਿਸੇ ਪੈਰਾਮੀਟਰ ਦੇ, output() PDF bytearray ਬਫਰ ਵਾਪਸ ਕਰਦਾ ਹੈ।

ਟਿਊਟੋ 2 - ਹੈਡਰ, ਫੁੱਟਰ, ਪੇਜ ਬ੍ਰੇਕ ਅਤੇ ਚਿੱਤਰ

ਇੱਥੇ ਹੈਡਰ, ਫੁੱਟਰ ਅਤੇ ਲੋਗੋ ਵਾਲੀ ਦੋ ਪੰਨਿਆਂ ਦੀ ਉਦਾਹਰਨ ਹੈ:

from fpdf import FPDF


class PDF(FPDF):
    def header(self):
        # Rendering logo:
        self.image("../docs/fpdf2-logo.png", 10, 8, 33)
        # Setting font: helvetica bold 15
        self.set_font("helvetica", style="B", size=15)
        # Moving cursor to the right:
        self.cell(80)
        # Printing title:
        self.cell(30, 10, "Title", border=1, align="C")
        # Performing a line break:
        self.ln(20)

    def footer(self):
        # Position cursor at 1.5 cm from bottom:
        self.set_y(-15)
        # Setting font: helvetica italic 8
        self.set_font("helvetica", style="I", size=8)
        # Printing page number:
        self.cell(0, 10, f"Page {self.page_no()}/{{nb}}", align="C")


# Instantiation of inherited class
pdf = PDF()
pdf.add_page()
pdf.set_font("Times", size=12)
for i in range(1, 41):
    pdf.cell(0, 10, f"Printing line number {i}", new_x="LMARGIN", new_y="NEXT")
pdf.output("new-tuto2.pdf")

ਨਤੀਜਾ PDF

ਇਹ ਉਦਾਹਰਨ ਪੰਨਾ ਹੈਡਰ ਅਤੇ ਫੁੱਟਰ ਪ੍ਰੋਸੈੱਸ ਕਰਨ ਲਈ header ਅਤੇ footer ਮੈਥਡਾਂ ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ। ਇਹ ਆਟੋਮੈਟਿਕ ਕਾਲ ਹੁੰਦੇ ਹਨ। ਇਹ FPDF ਕਲਾਸ ਵਿੱਚ ਪਹਿਲਾਂ ਤੋਂ ਮੌਜੂਦ ਹਨ ਪਰ ਕੁਝ ਨਹੀਂ ਕਰਦੇ, ਇਸ ਲਈ ਸਾਨੂੰ ਕਲਾਸ ਨੂੰ ਐਕਸਟੈਂਡ ਕਰਨਾ ਅਤੇ ਇਨ੍ਹਾਂ ਨੂੰ ਓਵਰਰਾਈਡ ਕਰਨਾ ਪਵੇਗਾ।

ਲੋਗੋ image ਮੈਥਡ ਨਾਲ ਇਸਦੇ ਉੱਪਰ-ਖੱਬੇ ਕੋਨੇ ਅਤੇ ਚੌੜਾਈ ਨਿਰਧਾਰਤ ਕਰਕੇ ਪ੍ਰਿੰਟ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਉਚਾਈ ਚਿੱਤਰ ਦੇ ਅਨੁਪਾਤ ਦੀ ਪਾਲਣਾ ਕਰਨ ਲਈ ਆਟੋਮੈਟਿਕ ਗਿਣੀ ਜਾਂਦੀ ਹੈ।

ਪੰਨਾ ਨੰਬਰ ਪ੍ਰਿੰਟ ਕਰਨ ਲਈ, ਸੈੱਲ ਦੀ ਚੌੜਾਈ ਵਜੋਂ ਇੱਕ ਨੱਲ ਵੈਲਿਊ ਪਾਸ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਸੈੱਲ ਪੰਨੇ ਦੇ ਸੱਜੇ ਮਾਰਜਿਨ ਤੱਕ ਫੈਲਣਾ ਚਾਹੀਦਾ ਹੈ; ਇਹ ਟੈਕਸਟ ਕੇਂਦਰਿਤ ਕਰਨ ਲਈ ਸੌਖਾ ਹੈ। ਮੌਜੂਦਾ ਪੰਨਾ ਨੰਬਰ page_no ਮੈਥਡ ਦੁਆਰਾ ਵਾਪਸ ਕੀਤਾ ਜਾਂਦਾ ਹੈ; ਕੁੱਲ ਪੰਨਿਆਂ ਦੀ ਗਿਣਤੀ ਲਈ, ਵਿਸ਼ੇਸ਼ ਵੈਲਿਊ {nb} ਵਰਤੀ ਜਾਂਦੀ ਹੈ ਜੋ ਡੌਕੂਮੈਂਟ ਬੰਦ ਹੋਣ 'ਤੇ ਬਦਲੀ ਜਾਵੇਗੀ (ਇਸ ਵਿਸ਼ੇਸ਼ ਵੈਲਿਊ ਨੂੰ alias_nb_pages() ਨਾਲ ਬਦਲਿਆ ਜਾ ਸਕਦਾ ਹੈ)। ਨੋਟ ਕਰੋ set_y ਮੈਥਡ ਦੀ ਵਰਤੋਂ ਜੋ ਪੰਨੇ ਵਿੱਚ ਉੱਪਰ ਜਾਂ ਹੇਠਾਂ ਤੋਂ ਸ਼ੁਰੂ ਕਰਕੇ ਪੂਰਨ ਸਥਿਤੀ ਸੈੱਟ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦੀ ਹੈ।

ਇੱਥੇ ਇੱਕ ਹੋਰ ਦਿਲਚਸਪ ਵਿਸ਼ੇਸ਼ਤਾ ਵਰਤੀ ਗਈ ਹੈ: ਆਟੋਮੈਟਿਕ ਪੇਜ ਬ੍ਰੇਕਿੰਗ। ਜਿਵੇਂ ਹੀ ਕੋਈ ਸੈੱਲ ਪੰਨੇ ਵਿੱਚ ਸੀਮਾ ਪਾਰ ਕਰੇਗਾ (ਡਿਫਾਲਟ ਤੌਰ 'ਤੇ ਹੇਠੋਂ 2 ਸੈਂਟੀਮੀਟਰ), ਬ੍ਰੇਕ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਅਤੇ ਫੌਂਟ ਬਹਾਲ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਭਾਵੇਂ ਹੈਡਰ ਅਤੇ ਫੁੱਟਰ ਆਪਣਾ ਫੌਂਟ (helvetica) ਚੁਣਦੇ ਹਨ, ਬਾਡੀ Times ਨਾਲ ਜਾਰੀ ਰਹਿੰਦੀ ਹੈ। ਆਟੋਮੈਟਿਕ ਬਹਾਲੀ ਦੀ ਇਹ ਵਿਧੀ ਰੰਗਾਂ ਅਤੇ ਲਾਈਨ ਦੀ ਚੌੜਾਈ 'ਤੇ ਵੀ ਲਾਗੂ ਹੁੰਦੀ ਹੈ। ਜੋ ਸੀਮਾ ਪੇਜ ਬ੍ਰੇਕ ਟ੍ਰਿਗਰ ਕਰਦੀ ਹੈ ਉਹ set_auto_page_break ਨਾਲ ਸੈੱਟ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ।

ਟਿਊਟੋ 3 - ਲਾਈਨ ਬ੍ਰੇਕ ਅਤੇ ਰੰਗ

ਆਓ ਇੱਕ ਉਦਾਹਰਨ ਨਾਲ ਜਾਰੀ ਰੱਖੀਏ ਜੋ ਜਸਟੀਫਾਈਡ ਪੈਰਾਗ੍ਰਾਫ ਪ੍ਰਿੰਟ ਕਰਦੀ ਹੈ। ਇਹ ਰੰਗਾਂ ਦੀ ਵਰਤੋਂ ਵੀ ਦਰਸਾਉਂਦੀ ਹੈ।

from fpdf import FPDF


class PDF(FPDF):
    def header(self):
        # Setting font: helvetica bold 15
        self.set_font("helvetica", style="B", size=15)
        # Calculating width of title and setting cursor position:
        width = self.get_string_width(self.title) + 6
        self.set_x((210 - width) / 2)
        # Setting colors for frame, background and text:
        self.set_draw_color(0, 80, 180)
        self.set_fill_color(230, 230, 0)
        self.set_text_color(220, 50, 50)
        # Setting thickness of the frame (1 mm)
        self.set_line_width(1)
        # Printing title:
        self.cell(
            width,
            9,
            self.title,
            border=1,
            new_x="LMARGIN",
            new_y="NEXT",
            align="C",
            fill=True,
        )
        # Performing a line break:
        self.ln(10)

    def footer(self):
        # Setting position at 1.5 cm from bottom:
        self.set_y(-15)
        # Setting font: helvetica italic 8
        self.set_font("helvetica", style="I", size=8)
        # Setting text color to gray:
        self.set_text_color(128)
        # Printing page number
        self.cell(0, 10, f"Page {self.page_no()}", align="C")

    def chapter_title(self, num, label):
        # Setting font: helvetica 12
        self.set_font("helvetica", size=12)
        # Setting background color
        self.set_fill_color(200, 220, 255)
        # Printing chapter name:
        self.cell(
            0,
            6,
            f"Chapter {num} : {label}",
            new_x="LMARGIN",
            new_y="NEXT",
            align="L",
            fill=True,
        )
        # Performing a line break:
        self.ln(4)

    def chapter_body(self, filepath):
        # Reading text file:
        with open(filepath, "rb") as fh:
            txt = fh.read().decode("latin-1")
        # Setting font: Times 12
        self.set_font("Times", size=12)
        # Printing justified text:
        self.multi_cell(0, 5, txt)
        # Performing a line break:
        self.ln()
        # Final mention in italics:
        self.set_font(style="I")
        self.cell(0, 5, "(end of excerpt)")

    def print_chapter(self, num, title, filepath):
        self.add_page()
        self.chapter_title(num, title)
        self.chapter_body(filepath)


pdf = PDF()
pdf.set_title("20000 Leagues Under the Seas")
pdf.set_author("Jules Verne")
pdf.print_chapter(1, "A RUNAWAY REEF", "20k_c1.txt")
pdf.print_chapter(2, "THE PROS AND CONS", "20k_c1.txt")
pdf.output("tuto3.pdf")

ਨਤੀਜਾ PDF

ਜੂਲਸ ਵਰਨ ਟੈਕਸਟ

get_string_width ਮੈਥਡ ਮੌਜੂਦਾ ਫੌਂਟ ਵਿੱਚ ਸਟ੍ਰਿੰਗ ਦੀ ਲੰਬਾਈ ਨਿਰਧਾਰਤ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ, ਜੋ ਇੱਥੇ ਸਿਰਲੇਖ ਦੇ ਆਲੇ-ਦੁਆਲੇ ਫਰੇਮ ਦੀ ਸਥਿਤੀ ਅਤੇ ਚੌੜਾਈ ਦੀ ਗਣਨਾ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਫਿਰ ਰੰਗ ਸੈੱਟ ਕੀਤੇ ਜਾਂਦੇ ਹਨ (set_draw_color, set_fill_color ਅਤੇ set_text_color ਰਾਹੀਂ) ਅਤੇ ਲਾਈਨ ਦੀ ਮੋਟਾਈ set_line_width ਨਾਲ 1 ਮਿਲੀਮੀਟਰ ਸੈੱਟ ਕੀਤੀ ਜਾਂਦੀ ਹੈ (ਡਿਫਾਲਟ 0.2 ਦੇ ਮੁਕਾਬਲੇ)। ਅਖੀਰ ਵਿੱਚ, ਅਸੀਂ ਸੈੱਲ ਆਉਟਪੁੱਟ ਕਰਦੇ ਹਾਂ (ਆਖਰੀ ਪੈਰਾਮੀਟਰ true ਬੈਕਗ੍ਰਾਊਂਡ ਭਰਨ ਦਾ ਸੰਕੇਤ ਕਰਦਾ ਹੈ)।

ਪੈਰਾਗ੍ਰਾਫ ਪ੍ਰਿੰਟ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਣ ਵਾਲਾ ਮੈਥਡ multi_cell ਹੈ। ਟੈਕਸਟ ਡਿਫਾਲਟ ਤੌਰ 'ਤੇ ਜਸਟੀਫਾਈਡ ਹੁੰਦਾ ਹੈ। ਹਰ ਵਾਰ ਜਦੋਂ ਲਾਈਨ ਸੈੱਲ ਦੇ ਸੱਜੇ ਕਿਨਾਰੇ 'ਤੇ ਪਹੁੰਚਦੀ ਹੈ ਜਾਂ ਕੈਰੀਜ ਰਿਟਰਨ ਕੈਰੈਕਟਰ (\n) ਮਿਲਦਾ ਹੈ, ਲਾਈਨ ਬ੍ਰੇਕ ਹੁੰਦੀ ਹੈ ਅਤੇ ਮੌਜੂਦਾ ਦੇ ਹੇਠਾਂ ਆਟੋਮੈਟਿਕ ਨਵਾਂ ਸੈੱਲ ਬਣਦਾ ਹੈ। ਸੱਜੀ ਸੀਮਾ ਤੋਂ ਪਹਿਲਾਂ ਸਭ ਤੋਂ ਨੇੜੇ ਦੇ ਸਪੇਸ ਜਾਂ ਸੌਫਟ-ਹਾਈਫਨ (\u00ad) 'ਤੇ ਆਟੋਮੈਟਿਕ ਬ੍ਰੇਕ ਹੁੰਦੀ ਹੈ।

ਦੋ ਡੌਕੂਮੈਂਟ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨਿਰਧਾਰਤ ਕੀਤੀਆਂ ਗਈਆਂ ਹਨ: ਸਿਰਲੇਖ (set_title) ਅਤੇ ਲੇਖਕ (set_author)। ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਦੋ ਤਰੀਕਿਆਂ ਨਾਲ ਵੇਖੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ। ਪਹਿਲਾ, Acrobat Reader ਨਾਲ ਸਿੱਧੇ ਡੌਕੂਮੈਂਟ ਖੋਲ੍ਹੋ, File ਮੈਨੂ 'ਤੇ ਜਾਓ ਅਤੇ Document Properties ਵਿਕਲਪ ਚੁਣੋ। ਦੂਜਾ, ਪਲੱਗ-ਇਨ ਤੋਂ ਵੀ ਉਪਲਬਧ, ਸੱਜਾ-ਕਲਿੱਕ ਕਰੋ ਅਤੇ Document Properties ਚੁਣੋ।

ਟਿਊਟੋ 4 - ਮਲਟੀ ਕਾਲਮ

ਇਹ ਉਦਾਹਰਨ ਪਿਛਲੀ ਦਾ ਇੱਕ ਰੂਪ ਹੈ, ਜੋ ਦਿਖਾਉਂਦੀ ਹੈ ਕਿ ਟੈਕਸਟ ਨੂੰ ਕਈ ਕਾਲਮਾਂ ਵਿੱਚ ਕਿਵੇਂ ਵਿਛਾਉਣਾ ਹੈ।

from fpdf import FPDF


class PDF(FPDF):
    def header(self):
        self.set_font("helvetica", style="B", size=15)
        width = self.get_string_width(self.title) + 6
        self.set_x((210 - width) / 2)
        self.set_draw_color(0, 80, 180)
        self.set_fill_color(230, 230, 0)
        self.set_text_color(220, 50, 50)
        self.set_line_width(1)
        self.cell(
            width,
            9,
            self.title,
            border=1,
            new_x="LMARGIN",
            new_y="NEXT",
            align="C",
            fill=True,
        )
        self.ln(10)

    def footer(self):
        self.set_y(-15)
        self.set_font("helvetica", style="I", size=8)
        self.set_text_color(128)
        self.cell(0, 10, f"Page {self.page_no()}", align="C")

    def chapter_title(self, num, label):
        self.set_font("helvetica", size=12)
        self.set_fill_color(200, 220, 255)
        self.cell(
            0,
            6,
            f"Chapter {num} : {label}",
            new_x="LMARGIN",
            new_y="NEXT",
            border="L",
            fill=True,
        )
        self.ln(4)

    def chapter_body(self, fname):
        # Reading text file:
        with open(fname, "rb") as fh:
            txt = fh.read().decode("latin-1")
        with self.text_columns(
            ncols=3, gutter=5, text_align="J", line_height=1.19
        ) as cols:
            # Setting font: Times 12
            self.set_font("Times", size=12)
            cols.write(txt)
            cols.ln()
            # Final mention in italics:
            self.set_font(style="I")
            cols.write("(end of excerpt)")

    def print_chapter(self, num, title, fname):
        self.add_page()
        self.chapter_title(num, title)
        self.chapter_body(fname)


pdf = PDF()
pdf.set_title("20000 Leagues Under the Seas")
pdf.set_author("Jules Verne")
pdf.print_chapter(1, "A RUNAWAY REEF", "20k_c1.txt")
pdf.print_chapter(2, "THE PROS AND CONS", "20k_c1.txt")
pdf.output("tuto4.pdf")

ਨਤੀਜਾ PDF

ਜੂਲਸ ਵਰਨ ਟੈਕਸਟ

ਪਿਛਲੇ ਟਿਊਟੋਰੀਅਲ ਤੋਂ ਮੁੱਖ ਫਰਕ text_columns ਮੈਥਡ ਦੀ ਵਰਤੋਂ ਹੈ। ਇਹ ਸਾਰਾ ਟੈਕਸਟ ਇਕੱਠਾ ਕਰਦਾ ਹੈ ਅਤੇ ਬੇਨਤੀ ਕੀਤੇ ਕਾਲਮਾਂ ਦੀ ਗਿਣਤੀ ਵਿੱਚ ਵੰਡਦਾ ਹੈ, ਲੋੜ ਅਨੁਸਾਰ ਆਟੋਮੈਟਿਕ ਪੇਜ ਬ੍ਰੇਕ ਪਾਉਂਦਾ ਹੈ।

ਟਿਊਟੋ 5 - ਟੇਬਲ ਬਣਾਉਣਾ

ਇਹ ਟਿਊਟੋਰੀਅਲ ਦੋ ਵੱਖ-ਵੱਖ ਟੇਬਲ ਬਣਾਉਣ ਦਾ ਤਰੀਕਾ ਦੱਸੇਗਾ।

import csv
from fpdf import FPDF
from fpdf.fonts import FontFace
from fpdf.enums import TableCellFillMode

with open("countries.txt", encoding="utf8") as csv_file:
    data = list(csv.reader(csv_file, delimiter=","))

pdf = FPDF()
pdf.set_font("helvetica", size=14)

# Basic table:
pdf.add_page()
with pdf.table() as table:
    for data_row in data:
        row = table.row()
        for datum in data_row:
            row.cell(datum)

# Styled table:
pdf.add_page()
pdf.set_draw_color(255, 0, 0)
pdf.set_line_width(0.3)
headings_style = FontFace(emphasis="BOLD", color=255, fill_color=(255, 100, 0))
with pdf.table(
    borders_layout="NO_HORIZONTAL_LINES",
    cell_fill_color=(224, 235, 255),
    cell_fill_mode=TableCellFillMode.ROWS,
    col_widths=(42, 39, 35, 42),
    headings_style=headings_style,
    line_height=6,
    text_align=("LEFT", "CENTER", "RIGHT", "RIGHT"),
    width=160,
) as table:
    for data_row in data:
        row = table.row()
        for datum in data_row:
            row.cell(datum)

pdf.output("tuto5.pdf")

ਨਤੀਜਾ PDF - ਦੇਸ਼ਾਂ ਦਾ CSV ਡੇਟਾ

ਪਹਿਲੀ ਉਦਾਹਰਨ FPDF.table() ਨੂੰ ਡੇਟਾ ਫੀਡ ਕਰਕੇ ਸਭ ਤੋਂ ਸਧਾਰਨ ਤਰੀਕੇ ਨਾਲ ਪ੍ਰਾਪਤ ਕੀਤੀ ਗਈ ਹੈ।

ਦੂਜੀ ਟੇਬਲ ਕੁਝ ਸੁਧਾਰ ਲਿਆਉਂਦੀ ਹੈ: ਰੰਗ, ਸੀਮਤ ਟੇਬਲ ਚੌੜਾਈ, ਘੱਟ ਲਾਈਨ ਉਚਾਈ, ਕੇਂਦਰਿਤ ਸਿਰਲੇਖ, ਕਸਟਮ ਚੌੜਾਈ ਵਾਲੇ ਕਾਲਮ, ਸੱਜੇ ਅਲਾਈਨ ਕੀਤੇ ਅੰਕੜੇ... ਇਸ ਤੋਂ ਇਲਾਵਾ, ਹਰੀਜ਼ੌਂਟਲ ਲਾਈਨਾਂ ਹਟਾ ਦਿੱਤੀਆਂ ਗਈਆਂ ਹਨ। ਇਹ ਉਪਲਬਧ ਵੈਲਿਊਜ਼ ਵਿੱਚੋਂ borders_layout ਚੁਣ ਕੇ ਕੀਤਾ ਗਿਆ: TableBordersLayout

ਟਿਊਟੋ 6 - ਲਿੰਕ ਬਣਾਉਣਾ ਅਤੇ ਟੈਕਸਟ ਸਟਾਈਲ ਮਿਲਾਉਣਾ

ਇਹ ਟਿਊਟੋਰੀਅਲ PDF ਡੌਕੂਮੈਂਟ ਅੰਦਰ ਲਿੰਕ ਪਾਉਣ ਦੇ ਕਈ ਤਰੀਕੇ ਦੱਸੇਗਾ, ਨਾਲ ਹੀ ਬਾਹਰੀ ਸ੍ਰੋਤਾਂ ਦੇ ਲਿੰਕ ਜੋੜਨਾ।

ਇਹ ਇੱਕੋ ਟੈਕਸਟ ਵਿੱਚ ਵੱਖ-ਵੱਖ ਟੈਕਸਟ ਸਟਾਈਲ (ਬੋਲਡ, ਇਟੈਲਿਕ, ਅੰਡਰਲਾਈਨ) ਵਰਤਣ ਦੇ ਕਈ ਤਰੀਕੇ ਵੀ ਦਿਖਾਏਗਾ।

from fpdf import FPDF

pdf = FPDF()

# First page:
pdf.add_page()
pdf.set_font("helvetica", size=20)
pdf.write(5, "To find out what's new in self tutorial, click ")
pdf.set_font(style="U")
link = pdf.add_link(page=2)
pdf.write(5, "here", link)
pdf.set_font()

# Second page:
pdf.add_page()
pdf.image(
    "../docs/fpdf2-logo.png", 10, 10, 50, 0, "", "https://py-pdf.github.io/fpdf2/"
)
pdf.set_left_margin(60)
pdf.set_font_size(18)
pdf.write_html(
    """You can print text mixing different styles using HTML tags: <b>bold</b>, <i>italic</i>,
<u>underlined</u>, or <b><i><u>all at once</u></i></b>!
<br><br>You can also insert links on text, such as <a href="https://py-pdf.github.io/fpdf2/">https://py-pdf.github.io/fpdf2/</a>,
or on an image: the logo is clickable!"""
)
pdf.output("tuto6.pdf")

ਨਤੀਜਾ PDF - fpdf2-ਲੋਗੋ

ਇੱਥੇ ਟੈਕਸਟ ਪ੍ਰਿੰਟ ਕਰਨ ਲਈ ਦਿਖਾਇਆ ਗਿਆ ਨਵਾਂ ਮੈਥਡ write() ਹੈ। ਇਹ multi_cell() ਨਾਲ ਬਹੁਤ ਮਿਲਦਾ ਹੈ, ਮੁੱਖ ਫਰਕ ਇਹ ਹਨ:

  • ਲਾਈਨ ਦਾ ਅੰਤ ਸੱਜੇ ਮਾਰਜਿਨ 'ਤੇ ਹੈ ਅਤੇ ਅਗਲੀ ਲਾਈਨ ਖੱਬੇ ਮਾਰਜਿਨ ਤੋਂ ਸ਼ੁਰੂ ਹੁੰਦੀ ਹੈ।
  • ਮੌਜੂਦਾ ਸਥਿਤੀ ਟੈਕਸਟ ਦੇ ਅੰਤ 'ਤੇ ਚਲੀ ਜਾਂਦੀ ਹੈ।

ਇਸ ਲਈ ਮੈਥਡ ਸਾਨੂੰ ਟੈਕਸਟ ਦਾ ਇੱਕ ਹਿੱਸਾ ਲਿਖਣ, ਫੌਂਟ ਸਟਾਈਲ ਬਦਲਣ, ਅਤੇ ਜਿੱਥੇ ਛੱਡਿਆ ਸੀ ਉੱਥੋਂ ਜਾਰੀ ਰੱਖਣ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।

ਇੰਟਰਨਲ ਲਿੰਕ ਜੋੜਨ ਲਈ ਜੋ ਦੂਜੇ ਪੰਨੇ 'ਤੇ ਲੈ ਜਾਵੇ, ਅਸੀਂ add_link() ਮੈਥਡ ਵਰਤਿਆ, ਜੋ ਇੱਕ ਕਲਿੱਕ ਕਰਨ ਯੋਗ ਖੇਤਰ ਬਣਾਉਂਦਾ ਹੈ।

ਚਿੱਤਰ ਨਾਲ ਬਾਹਰੀ ਲਿੰਕ ਬਣਾਉਣ ਲਈ, ਅਸੀਂ image() ਵਰਤਿਆ। ਇਸ ਮੈਥਡ ਵਿੱਚ ਇਸਦੇ ਆਰਗੂਮੈਂਟਾਂ ਵਿੱਚੋਂ ਇੱਕ ਵਜੋਂ ਲਿੰਕ ਪਾਸ ਕਰਨ ਦਾ ਵਿਕਲਪ ਹੈ।

ਵਿਕਲਪ ਵਜੋਂ, ਫੌਂਟ ਸਟਾਈਲ ਬਦਲਣ ਅਤੇ ਲਿੰਕ ਜੋੜਨ ਦਾ ਇੱਕ ਹੋਰ ਤਰੀਕਾ write_html() ਮੈਥਡ ਵਰਤਣਾ ਹੈ। ਇਹ ਇੱਕ HTML ਪਾਰਸਰ ਹੈ, ਜੋ ਟੈਕਸਟ ਜੋੜਨ, ਫੌਂਟ ਸਟਾਈਲ ਬਦਲਣ ਅਤੇ HTML ਨਾਲ ਲਿੰਕ ਜੋੜਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।