Hướng dẫn fpdf multi_cell example python - fpdf multi_cell ví dụ python

fpdf.multi_cell(w: float, h: float, txt: str, border = 0, 
                align: str = 'J', fill: bool = False)

Sự mô tả

Phương pháp này cho phép in văn bản với ngắt dòng. Chúng có thể tự động (ngay khi văn bản đến đúng biên giới của ô) hoặc rõ ràng (thông qua ký tự

data1 = list(csv.reader(csvfile))
print(data1) ##[[row1],[row2],[row3],[row4]] 
## row1, row2, etc are the rows from csv

for row in data1:
    for x,y in enumerate(row):
        if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
            pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
        else:
            pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
2). Càng nhiều ô khi cần thiết là đầu ra, một bên dưới cái kia. Văn bản có thể được căn chỉnh, trung tâm hoặc hợp lý. Các khối tế bào có thể được đóng khung và nền được sơn.

Thông số

w:

Chiều rộng của các ô. Nếu 0, chúng mở rộng đến lề phải của trang.

h:

Chiều cao của các tế bào.

txt:

Chuỗi để in.

border:

Cho biết nếu đường viền phải được vẽ xung quanh khối ô. Giá trị có thể là một số:

  • 0: Không có biên giới
  • 1: Khung

hoặc một chuỗi chứa một số hoặc tất cả các ký tự sau (theo bất kỳ thứ tự nào):

  • data1 = list(csv.reader(csvfile))
    print(data1) ##[[row1],[row2],[row3],[row4]] 
    ## row1, row2, etc are the rows from csv
    
    for row in data1:
        for x,y in enumerate(row):
            if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
                pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
            else:
                pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
    
    3: Trái
  • data1 = list(csv.reader(csvfile))
    print(data1) ##[[row1],[row2],[row3],[row4]] 
    ## row1, row2, etc are the rows from csv
    
    for row in data1:
        for x,y in enumerate(row):
            if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
                pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
            else:
                pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
    
    4: Top
  • data1 = list(csv.reader(csvfile))
    print(data1) ##[[row1],[row2],[row3],[row4]] 
    ## row1, row2, etc are the rows from csv
    
    for row in data1:
        for x,y in enumerate(row):
            if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
                pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
            else:
                pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
    
    5: Phải
  • data1 = list(csv.reader(csvfile))
    print(data1) ##[[row1],[row2],[row3],[row4]] 
    ## row1, row2, etc are the rows from csv
    
    for row in data1:
        for x,y in enumerate(row):
            if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
                pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
            else:
                pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
    
    6: dưới cùng

Giá trị mặc định: 0.

align:

Đặt căn chỉnh văn bản. Các giá trị có thể là:

  • data1 = list(csv.reader(csvfile))
    print(data1) ##[[row1],[row2],[row3],[row4]] 
    ## row1, row2, etc are the rows from csv
    
    for row in data1:
        for x,y in enumerate(row):
            if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
                pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
            else:
                pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
    
    3: Căn chỉnh trái
  • data1 = list(csv.reader(csvfile))
    print(data1) ##[[row1],[row2],[row3],[row4]] 
    ## row1, row2, etc are the rows from csv
    
    for row in data1:
        for x,y in enumerate(row):
            if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
                pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
            else:
                pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
    
    8: Trung tâm
  • data1 = list(csv.reader(csvfile))
    print(data1) ##[[row1],[row2],[row3],[row4]] 
    ## row1, row2, etc are the rows from csv
    
    for row in data1:
        for x,y in enumerate(row):
            if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
                pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
            else:
                pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
    
    5: Căn chỉnh đúng
  • from fpdf import FPDF
    
    pdf = FPDF()
    pdf.add_page()
    pdf.set_font("helvetica", "B", 16)
    pdf.cell(40, 10, "Hello World!")
    pdf.output("tuto1.pdf")
    
    0: Biện minh (giá trị mặc định)

lấp đầy

Cho biết nếu nền tế bào phải được sơn (

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font("helvetica", "B", 16)
pdf.cell(40, 10, "Hello World!")
pdf.output("tuto1.pdf")
1) hoặc trong suốt (
from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font("helvetica", "B", 16)
pdf.cell(40, 10, "Hello World!")
pdf.output("tuto1.pdf")
2). Giá trị mặc định: Sai.

Xem thêm

set_doc_option, set_font, set_draw_color, set_fill_color, set_text_color, set_line_width, cell, write, set_auto_page_break.

from fpdf import FPDF

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

Sự mô tả

Phương pháp này cho phép in văn bản với ngắt dòng. Chúng có thể tự động (ngay khi văn bản đến đúng biên giới của ô) hoặc rõ ràng (thông qua ký tự \ n). Càng nhiều ô khi cần thiết là đầu ra, một bên dưới cái kia. Văn bản có thể được căn chỉnh, trung tâm hoặc hợp lý. Các khối tế bào có thể được đóng khung và nền được sơn.
Văn bản có thể được căn chỉnh, trung tâm hoặc hợp lý. Các khối tế bào có thể được đóng khung và nền được sơn.

Thông số

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font("helvetica", "B", 16)
pdf.cell(40, 10, "Hello World!")
pdf.output("tuto1.pdf")
4 Chiều rộng của các ô. Nếu
from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font("helvetica", "B", 16)
pdf.cell(40, 10, "Hello World!")
pdf.output("tuto1.pdf")
5, chúng mở rộng đến lề phải của trang.
from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font("helvetica", "B", 16)
pdf.cell(40, 10, "Hello World!")
pdf.output("tuto1.pdf")
6 Chiều cao của các tế bào.
from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font("helvetica", "B", 16)
pdf.cell(40, 10, "Hello World!")
pdf.output("tuto1.pdf")
7 Chuỗi để in.
from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font("helvetica", "B", 16)
pdf.cell(40, 10, "Hello World!")
pdf.output("tuto1.pdf")
8 cho biết các đường viền phải được vẽ xung quanh khối ô. Giá trị có thể là một số:
  • from fpdf import FPDF
    
    pdf = FPDF()
    pdf.add_page()
    pdf.set_font("helvetica", "B", 16)
    pdf.cell(40, 10, "Hello World!")
    pdf.output("tuto1.pdf")
    
    5: Không có biên giới
  • pdf = FPDF(orientation="P", unit="mm", format="A4")
    
    0: Khung
hoặc một chuỗi chứa một số hoặc tất cả các ký tự sau (theo bất kỳ thứ tự nào):
  • data1 = list(csv.reader(csvfile))
    print(data1) ##[[row1],[row2],[row3],[row4]] 
    ## row1, row2, etc are the rows from csv
    
    for row in data1:
        for x,y in enumerate(row):
            if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
                pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
            else:
                pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
    
    3: Trái
  • data1 = list(csv.reader(csvfile))
    print(data1) ##[[row1],[row2],[row3],[row4]] 
    ## row1, row2, etc are the rows from csv
    
    for row in data1:
        for x,y in enumerate(row):
            if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
                pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
            else:
                pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
    
    4: Top
  • data1 = list(csv.reader(csvfile))
    print(data1) ##[[row1],[row2],[row3],[row4]] 
    ## row1, row2, etc are the rows from csv
    
    for row in data1:
        for x,y in enumerate(row):
            if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
                pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
            else:
                pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
    
    5: Phải
  • data1 = list(csv.reader(csvfile))
    print(data1) ##[[row1],[row2],[row3],[row4]] 
    ## row1, row2, etc are the rows from csv
    
    for row in data1:
        for x,y in enumerate(row):
            if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
                pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
            else:
                pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
    
    6: dưới cùng
Giá trị mặc định:
from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font("helvetica", "B", 16)
pdf.cell(40, 10, "Hello World!")
pdf.output("tuto1.pdf")
5.
pdf = FPDF(orientation="P", unit="mm", format="A4")
6 Đặt căn chỉnh văn bản. Các giá trị có thể là:
  • data1 = list(csv.reader(csvfile))
    print(data1) ##[[row1],[row2],[row3],[row4]] 
    ## row1, row2, etc are the rows from csv
    
    for row in data1:
        for x,y in enumerate(row):
            if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
                pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
            else:
                pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
    
    3: Căn chỉnh trái
  • data1 = list(csv.reader(csvfile))
    print(data1) ##[[row1],[row2],[row3],[row4]] 
    ## row1, row2, etc are the rows from csv
    
    for row in data1:
        for x,y in enumerate(row):
            if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
                pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
            else:
                pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
    
    8: Trung tâm
  • data1 = list(csv.reader(csvfile))
    print(data1) ##[[row1],[row2],[row3],[row4]] 
    ## row1, row2, etc are the rows from csv
    
    for row in data1:
        for x,y in enumerate(row):
            if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
                pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
            else:
                pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
    
    5: Căn chỉnh đúng
  • from fpdf import FPDF
    
    pdf = FPDF()
    pdf.add_page()
    pdf.set_font("helvetica", "B", 16)
    pdf.cell(40, 10, "Hello World!")
    pdf.output("tuto1.pdf")
    
    0: Biện minh (giá trị mặc định)
pdf.set_font('helvetica', 'B', 16)
1 chỉ ra nếu nền tế bào phải được sơn (
pdf.set_font('helvetica', 'B', 16)
2) hoặc trong suốt (
pdf.set_font('helvetica', 'B', 16)
3). Giá trị mặc định:
pdf.set_font('helvetica', 'B', 16)
3.

Xem thêm

Setfont, setDrawColor, setFillColor, setTextColor, setLineWidth, cell, write, setAutopageBreak

Lưu ý: Đây là một cách tiếp cận khác cho vấn đề trên

Đối với yêu cầu của tôi, tôi cần một số cột để có chiều rộng cột cao hơn và một số cột có chiều rộng thấp hơn. Đã sửa lỗi chiều rộng cột cho tất cả các cột đang làm cho bảng của tôi đi ra khỏi lề PDF. Multi Cell kết thúc văn bản và tăng chiều cao cột cho một số cột nhất định chứ không phải mọi cột. Vì vậy, cách tiếp cận của tôi là sử dụng hàm liệt kê và tự động điều chỉnh chiều rộng cột theo các nhu cầu như hình dưới đây.

data1 = list(csv.reader(csvfile))
print(data1) ##[[row1],[row2],[row3],[row4]] 
## row1, row2, etc are the rows from csv

for row in data1:
    for x,y in enumerate(row):
        if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
            pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
        else:
            pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60

Hi vọng điêu nay co ich.

Phương pháp Tài liệu đầy đủ:

pdf.set_font('helvetica', 'B', 16)
5 API Doc

  • Hướng dẫn
    • Tuto 1 - Ví dụ tối thiểu
    • Tuto 2 - Tiêu đề, chân trang, ngắt trang và hình ảnh
    • Tuto 3 - Phá vỡ dòng và màu sắc
    • Tuto 4 - Multi Cột
    • Tuto 5 - Tạo bảng
    • Tuto 6 - Tạo liên kết và phong cách văn bản trộn

Tuto 1 - Ví dụ tối thiểu

Hãy bắt đầu với ví dụ kinh điển:

from fpdf import FPDF

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

Kết quả là PDF

Sau khi bao gồm tệp thư viện, chúng tôi tạo một đối tượng

pdf.set_font('helvetica', 'B', 16)
6. Chất xây dựng FPDF được sử dụng ở đây với các giá trị mặc định: các trang nằm trong chân dung A4 và đơn vị đo là milimet. Nó có thể đã được chỉ định rõ ràng với:

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

Có thể đặt PDF ở chế độ cảnh quan (

data1 = list(csv.reader(csvfile))
print(data1) ##[[row1],[row2],[row3],[row4]] 
## row1, row2, etc are the rows from csv

for row in data1:
    for x,y in enumerate(row):
        if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
            pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
        else:
            pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
3) hoặc sử dụng các định dạng trang khác (chẳng hạn như
pdf.set_font('helvetica', 'B', 16)
8 và
pdf.set_font('helvetica', 'B', 16)
9) và đo các đơn vị (
pdf.cell(40, 10, 'Hello World!', 1)
0,
pdf.cell(40, 10, 'Hello World!', 1)
1,
pdf.cell(40, 10, 'Hello World!', 1)
2).

Hiện tại không có trang nào, vì vậy chúng tôi phải thêm một trang với add_page. Nguồn gốc nằm ở góc trên bên trái và vị trí hiện tại theo mặc định được đặt ở mức 1 cm từ biên giới; Các lề có thể được thay đổi với set_margins.

Trước khi chúng ta có thể in văn bản, bắt buộc phải chọn một phông chữ với set_font, nếu không, tài liệu sẽ không hợp lệ. Chúng tôi chọn Helvetica đậm 16:

pdf.set_font('helvetica', 'B', 16)

Chúng tôi có thể đã chỉ định chữ in nghiêng với

pdf.cell(40, 10, 'Hello World!', 1)
3, được gạch chân bằng
pdf.cell(40, 10, 'Hello World!', 1)
4 hoặc phông chữ thông thường với một chuỗi trống (hoặc bất kỳ kết hợp nào). Lưu ý rằng kích thước phông chữ được đưa ra theo điểm, không phải milimet (hoặc đơn vị người dùng khác); Đó là ngoại lệ duy nhất. Các phông chữ tích hợp khác là
pdf.cell(40, 10, 'Hello World!', 1)
5,
pdf.cell(40, 10, 'Hello World!', 1)
6,
pdf.cell(40, 10, 'Hello World!', 1)
7 và
pdf.cell(40, 10, 'Hello World!', 1)
8.

Bây giờ chúng ta có thể in một ô với ô. Một ô là một khu vực hình chữ nhật, có thể đóng khung, chứa một số văn bản. Nó được hiển thị ở vị trí hiện tại. Chúng tôi chỉ định kích thước của nó, văn bản của nó (giữa hoặc căn chỉnh), nếu nên rút ra biên giới và nơi vị trí hiện tại di chuyển theo nó (bên phải, bên dưới hoặc đến đầu dòng tiếp theo). Để thêm một khung, chúng tôi sẽ làm điều này:

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

Để thêm một ô mới bên cạnh nó với văn bản tập trung và chuyển sang dòng tiếp theo, chúng tôi sẽ làm:

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

Ghi chú: Việc phá vỡ dòng cũng có thể được thực hiện với LN. Phương pháp này cho phép chỉ định ngoài chiều cao của giờ nghỉ.: the line break can also be done with ln. This method allows to specify in addition the height of the break.

Cuối cùng, tài liệu được đóng và lưu dưới đường dẫn tệp được cung cấp bằng cách sử dụng đầu ra. Không có bất kỳ tham số nào được cung cấp,

pdf.cell(40, 10, 'Hello World!', 1)
9 trả về bộ đệm PDF
pdf.cell(60, 10, 'Powered by FPDF.', new_x="LMARGIN", new_y="NEXT", align='C')
0.

Dưới đây là một ví dụ hai trang với tiêu đề, chân trang và logo:

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", "B", 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", "I", 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")

Kết quả là PDF

Sau khi bao gồm tệp thư viện, chúng tôi tạo một đối tượng

pdf.set_font('helvetica', 'B', 16)
6. Chất xây dựng FPDF được sử dụng ở đây với các giá trị mặc định: các trang nằm trong chân dung A4 và đơn vị đo là milimet. Nó có thể đã được chỉ định rõ ràng với:

Có thể đặt PDF ở chế độ cảnh quan (

data1 = list(csv.reader(csvfile))
print(data1) ##[[row1],[row2],[row3],[row4]] 
## row1, row2, etc are the rows from csv

for row in data1:
    for x,y in enumerate(row):
        if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
            pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
        else:
            pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
3) hoặc sử dụng các định dạng trang khác (chẳng hạn như
pdf.set_font('helvetica', 'B', 16)
8 và
pdf.set_font('helvetica', 'B', 16)
9) và đo các đơn vị (
pdf.cell(40, 10, 'Hello World!', 1)
0,
pdf.cell(40, 10, 'Hello World!', 1)
1,
pdf.cell(40, 10, 'Hello World!', 1)
2).

Hiện tại không có trang nào, vì vậy chúng tôi phải thêm một trang với add_page. Nguồn gốc nằm ở góc trên bên trái và vị trí hiện tại theo mặc định được đặt ở mức 1 cm từ biên giới; Các lề có thể được thay đổi với set_margins.

Trước khi chúng ta có thể in văn bản, bắt buộc phải chọn một phông chữ với set_font, nếu không, tài liệu sẽ không hợp lệ. Chúng tôi chọn Helvetica đậm 16:

Chúng tôi có thể đã chỉ định chữ in nghiêng với pdf.cell(40, 10, 'Hello World!', 1) 3, được gạch chân bằng pdf.cell(40, 10, 'Hello World!', 1) 4 hoặc phông chữ thông thường với một chuỗi trống (hoặc bất kỳ kết hợp nào). Lưu ý rằng kích thước phông chữ được đưa ra theo điểm, không phải milimet (hoặc đơn vị người dùng khác); Đó là ngoại lệ duy nhất. Các phông chữ tích hợp khác là pdf.cell(40, 10, 'Hello World!', 1) 5, pdf.cell(40, 10, 'Hello World!', 1) 6, pdf.cell(40, 10, 'Hello World!', 1) 7 và pdf.cell(40, 10, 'Hello World!', 1) 8.

Bây giờ chúng ta có thể in một ô với ô. Một ô là một khu vực hình chữ nhật, có thể đóng khung, chứa một số văn bản. Nó được hiển thị ở vị trí hiện tại. Chúng tôi chỉ định kích thước của nó, văn bản của nó (giữa hoặc căn chỉnh), nếu nên rút ra biên giới và nơi vị trí hiện tại di chuyển theo nó (bên phải, bên dưới hoặc đến đầu dòng tiếp theo). Để thêm một khung, chúng tôi sẽ làm điều này:

from fpdf import FPDF


class PDF(FPDF):
    def header(self):
        # Setting font: helvetica bold 15
        self.set_font("helvetica", "B", 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", "I", 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", "", 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")

Kết quả là PDF

Sau khi bao gồm tệp thư viện, chúng tôi tạo một đối tượng

pdf.set_font('helvetica', 'B', 16)
6. Chất xây dựng FPDF được sử dụng ở đây với các giá trị mặc định: các trang nằm trong chân dung A4 và đơn vị đo là milimet. Nó có thể đã được chỉ định rõ ràng với:

Có thể đặt PDF ở chế độ cảnh quan (

data1 = list(csv.reader(csvfile))
print(data1) ##[[row1],[row2],[row3],[row4]] 
## row1, row2, etc are the rows from csv

for row in data1:
    for x,y in enumerate(row):
        if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
            pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
        else:
            pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
3) hoặc sử dụng các định dạng trang khác (chẳng hạn như
pdf.set_font('helvetica', 'B', 16)
8 và
pdf.set_font('helvetica', 'B', 16)
9) và đo các đơn vị (
pdf.cell(40, 10, 'Hello World!', 1)
0,
pdf.cell(40, 10, 'Hello World!', 1)
1,
pdf.cell(40, 10, 'Hello World!', 1)
2).

Hiện tại không có trang nào, vì vậy chúng tôi phải thêm một trang với add_page. Nguồn gốc nằm ở góc trên bên trái và vị trí hiện tại theo mặc định được đặt ở mức 1 cm từ biên giới; Các lề có thể được thay đổi với set_margins.

Hai thuộc tính tài liệu được xác định: tiêu đề (set_title) và tác giả (set_Author). Thuộc tính có thể được xem bằng hai phương tiện. Đầu tiên là mở tài liệu trực tiếp với Acrobat Reader, chuyển đến menu Tệp và chọn tùy chọn Thuộc tính tài liệu. Thứ hai, cũng có sẵn từ trình cắm, là nhấp chuột phải và chọn Thuộc tính tài liệu.

Tuto 4 - Multi Cột

Ví dụ này là một biến thể của cái trước, cho thấy cách đặt văn bản trên nhiều cột.

from fpdf import FPDF


class PDF(FPDF):
    def __init__(self):
        super().__init__()
        self.col = 0  # Current column
        self.y0 = 0  # Ordinate of column start

    def header(self):
        self.set_font("helvetica", "B", 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)
        # Saving ordinate position:
        self.y0 = self.get_y()

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

    def set_col(self, col):
        # Set column position:
        self.col = col
        x = 10 + col * 65
        self.set_left_margin(x)
        self.set_x(x)

    @property
    def accept_page_break(self):
        if self.col < 2:
            # Go to next column:
            self.set_col(self.col + 1)
            # Set ordinate to top:
            self.set_y(self.y0)
            # Stay on the same page:
            return False
        # Go back to first column:
        self.set_col(0)
        # Trigger a page break:
        return True

    def chapter_title(self, num, label):
        self.set_font("helvetica", "", 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)
        # Saving ordinate position:
        self.y0 = self.get_y()

    def chapter_body(self, name):
        # Reading text file:
        with open(name, "rb") as fh:
            txt = fh.read().decode("latin-1")
        # Setting font: Times 12
        self.set_font("Times", size=12)
        # Printing text in a 6cm width column:
        self.multi_cell(60, 5, txt)
        self.ln()
        # Final mention in italics:
        self.set_font(style="I")
        self.cell(0, 5, "(end of excerpt)")
        # Start back at first column:
        self.set_col(0)

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


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")

Kết quả là PDF

Jules Verne Văn bản

Sự khác biệt chính so với hướng dẫn trước đó là việc sử dụng các phương thức Accept_Page_Break và Set_col.

Sử dụng phương thức Accept_page_break, một khi ô vượt qua giới hạn dưới cùng của trang, nó sẽ kiểm tra số cột hiện tại. Nếu nó nhỏ hơn 2 (chúng tôi đã chọn chia trang thành ba cột), nó sẽ gọi phương thức SET_COL, tăng số cột và thay đổi vị trí của cột tiếp theo để văn bản có thể tiếp tục ở đó.

Sau khi đạt đến giới hạn dưới cùng của cột thứ ba, phương thức Accept_Page_Break sẽ đặt lại và quay lại cột đầu tiên và kích hoạt ngắt trang.

Tuto 5 - Tạo Tables¶

Hướng dẫn này sẽ giải thích cách tạo bảng dễ dàng.

Mã sẽ tạo ra ba bảng khác nhau để giải thích những gì có thể đạt được với một số điều chỉnh đơn giản.

data1 = list(csv.reader(csvfile))
print(data1) ##[[row1],[row2],[row3],[row4]] 
## row1, row2, etc are the rows from csv

for row in data1:
    for x,y in enumerate(row):
        if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
            pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
        else:
            pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
0

Kết quả là PDF - Văn bản quốc gia

Vì một bảng chỉ là một tập hợp các tế bào, nên việc xây dựng một cái từ chúng là điều tự nhiên.

Ví dụ đầu tiên đạt được theo cách cơ bản nhất có thể: các ô đóng khung đơn giản, tất cả cùng kích thước và được căn chỉnh trái. Kết quả là thô sơ nhưng rất nhanh để có được.

Bảng thứ hai mang lại một số cải tiến: mỗi cột có chiều rộng riêng, các tiêu đề được tập trung và các số liệu phù hợp. Hơn nữa, các đường ngang đã được gỡ bỏ. Điều này được thực hiện bằng phương thức của tham số biên của phương pháp

pdf.cell(60, 10, 'Powered by FPDF.', new_x="LMARGIN", new_y="NEXT", align='C')
6, trong đó chỉ định các cạnh của ô phải được rút ra. Ở đây chúng tôi muốn cái trái (
data1 = list(csv.reader(csvfile))
print(data1) ##[[row1],[row2],[row3],[row4]] 
## row1, row2, etc are the rows from csv

for row in data1:
    for x,y in enumerate(row):
        if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
            pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
        else:
            pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
3) và bên phải (
data1 = list(csv.reader(csvfile))
print(data1) ##[[row1],[row2],[row3],[row4]] 
## row1, row2, etc are the rows from csv

for row in data1:
    for x,y in enumerate(row):
        if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
            pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
        else:
            pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
5). Bây giờ chỉ có vấn đề của đường ngang để hoàn thành bảng vẫn còn. Có hai khả năng để giải quyết nó: kiểm tra dòng cuối cùng trong vòng lặp, trong trường hợp đó chúng tôi sử dụng LRB cho tham số biên giới; Hoặc, như được thực hiện ở đây, thêm dòng sau khi vòng lặp kết thúc.

Bảng thứ ba tương tự như cái thứ hai nhưng sử dụng màu sắc. Điền, văn bản và màu sắc được chỉ định đơn giản. Màu sắc thay thế cho các hàng thu được bằng cách sử dụng các ô trong suốt và đầy đủ.

Tuto 6 - Tạo liên kết và trộn các kiểu văn bản

Hướng dẫn này sẽ giải thích một số cách để chèn các liên kết trong tài liệu PDF, cũng như thêm các liên kết vào các nguồn bên ngoài.

Nó cũng sẽ hiển thị một số cách chúng ta có thể sử dụng các kiểu văn bản khác nhau, (in đậm, in nghiêng, gạch chân) trong cùng một văn bản.

data1 = list(csv.reader(csvfile))
print(data1) ##[[row1],[row2],[row3],[row4]] 
## row1, row2, etc are the rows from csv

for row in data1:
    for x,y in enumerate(row):
        if (x == 0) or (x == 1): ## dynamically change the column width with certain conditions
            pdf.cell(2.0, 0.15, str(y), align = 'C', border=1) ## width = 2.0
        else:
            pdf.cell(0.60, 0.15, str(y), align = 'L', border=1) ## width = 0.60
1

Kết quả là PDF - FPDF2 -Logo

Phương thức mới được hiển thị ở đây để in văn bản là viết (). Nó rất giống với multi_cell (), sự khác biệt chính là:

  • Phần cuối của dòng nằm ở lề phải và dòng tiếp theo bắt đầu ở lề trái.
  • Vị trí hiện tại di chuyển đến cuối văn bản.

Do đó, phương pháp cho phép chúng ta viết một đoạn văn bản, thay đổi kiểu phông chữ và tiếp tục từ nơi chính xác chúng ta rời đi. Mặt khác, nhược điểm chính của nó là chúng ta không thể biện minh cho văn bản như chúng ta làm với phương thức multi_cell ().

Trong trang đầu tiên của ví dụ, chúng tôi đã sử dụng Write () cho mục đích này. Phần đầu của câu được viết bằng văn bản kiểu thông thường, sau đó sử dụng phương thức set_font (), chúng tôi đã chuyển sang gạch chân và kết thúc câu.

Để thêm một liên kết nội bộ trỏ đến trang thứ hai, chúng tôi đã sử dụng phương thức add_link (), tạo ra một khu vực có thể nhấp mà chúng tôi đặt tên "Liên kết" hướng đến một nơi khác trong tài liệu. Trên trang thứ hai, chúng tôi đã sử dụng set_link () để xác định vùng đích cho liên kết chúng tôi vừa tạo.

Để tạo liên kết bên ngoài bằng hình ảnh, chúng tôi đã sử dụng Image (). Phương pháp có tùy chọn để truyền một liên kết là một trong những đối số của nó. Liên kết có thể là cả bên trong hoặc bên ngoài.

Thay thế, một tùy chọn khác để thay đổi kiểu phông chữ và thêm liên kết là sử dụng phương thức

pdf.cell(60, 10, 'Powered by FPDF.', new_x="LMARGIN", new_y="NEXT", align='C')
9. Đây là một trình phân tích cú pháp HTML, cho phép thêm văn bản, thay đổi kiểu phông chữ và thêm các liên kết bằng HTML.