Hướng dẫn python fpdf auto page break - python fpdf ngắt trang tự động

Tôi đã xem xét một câu hỏi tương tự ở đây nhưng dường như không có giải pháp ngoại trừ chuyển sang một thư viện khác.

Tôi đã tạo một số mã để tự động đặt hình ảnh theo chiều dọc và chiều ngang của mình, nhưng tôi gặp sự cố với các trang tự động bị hỏng khi hình ảnh được chèn lớn hơn trang (vì hình ảnh sẽ bị cắt).

def generate_pdf_report(start_height):
    name = "PDF"
    page_width = 210
    page_height = 297
    object_margins = 10
    objects_per_row = 1
    objects_in_path = 6 ##SAMPLE VARIABLE
    total_margins = object_margins * (objects_per_row + 1)
    object_width = (page_width - total_margins)/objects_per_row

    pdf = FPDF()
    pdf.add_page()

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

    object_counter = 0
    height_position = start_height
    for item in range(objects_in_path):
        object_counter += 1
        position = object_counter % objects_per_row
        if position == 0:
            start_position = object_width * (objects_per_row - 1) + object_margins * objects_per_row
            pdf.image("test_image.jpg", x=start_position, y=height_position, w=object_width)
            height_position += start_height + object_margins
        else:
            start_position = object_width * (position - 1) + object_margins * position
            pdf.image("test_image.jpg", x=start_position, y=height_position, w=object_width)

    pdf.output('test_pdf.pdf')

Có một số cách để trả về kích thước của mỗi hình ảnh được chèn bằng

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World!')
pdf.output('tuto1.pdf', 'F')
0? Vì tôi đặt chiều rộng của hình ảnh, chiều cao được thu nhỏ tự động theo mặc định. Vì vậy, hiện tại tôi phải thực sự đặt tham số
from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World!')
pdf.output('tuto1.pdf', 'F')
1 của hàm tùy thuộc vào chiều cao kết quả của hình ảnh-nếu nó có thể chồng chéo hoặc có một khoảng cách quá lớn. Vì tôi không có chiều cao hình ảnh để không gian đầy đủ các hình ảnh hoặc bỏ qua trang tiếp theo

Có một giải pháp tôi có thể nghĩ là đo hình ảnh bên ngoài gói PYFPDF và xác định tỷ lệ chiều rộng của hình ảnh để tôi có thể xác định chiều cao của hình ảnh cuối cùng. Nhưng tôi nghĩ nên có một cách tốt hơn và dễ dàng hơn?

Español: Hướng dẫn-es

  • Hướng dẫn
    • Ví dụ tối thiểu
    • Tiêu đề, chân trang, ngắt trang và hình ảnh
    • Phá vỡ dòng và màu sắc
    • Cài đặt phần ghi chú

Ví dụ tối thiểu

Tiêu đề, chân trang, ngắt trang và hình ảnh

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World!')
pdf.output('tuto1.pdf', 'F')

Phá vỡ dòng và màu sắc

Cài đặt phần ghi chú

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

Thử nghiệm

Sau khi bao gồm tệp thư viện, chúng tôi tạo một đối tượng FPDF. 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('P', 'mm', 'A4')

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

Có thể sử dụng cảnh quan (

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World!')
pdf.output('tuto1.pdf', 'F')
2), các định dạng trang khác (chẳng hạn như
from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World!')
pdf.output('tuto1.pdf', 'F')
3 và
from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World!')
pdf.output('tuto1.pdf', 'F')
4) và các đơn vị đo (
from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World!')
pdf.output('tuto1.pdf', 'F')
5,
from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World!')
pdf.output('tuto1.pdf', 'F')
6,
from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World!')
pdf.output('tuto1.pdf', 'F')
7).

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.

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

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 Arial Bold 16:

pdf.cell(60, 10, 'Powered by FPDF.', 0, 1, 'C')

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

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World!')
pdf.output('tuto1.pdf', 'F')
8, được gạch chân bằng
from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World!')
pdf.output('tuto1.pdf', 'F')
9 hoặc phông chữ thông thường với một chuỗi trống (hoặc bất kỳ sự 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ữ tiêu chuẩn khác là
pdf = FPDF('P', 'mm', 'A4')
0,
pdf = FPDF('P', 'mm', 'A4')
1,
pdf = FPDF('P', 'mm', 'A4')
2 và
pdf = FPDF('P', 'mm', 'A4')
3.
: the line break can also be done with ln. This method allows to specify in addition the height of the break.

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ó là đầu ra ở 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:

Để 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:: in case when the PDF is sent to the browser, nothing else must be output, not before nor after (the least space or carriage return matters). If you send some data before, you will get the error message: "Some data has already been output to browser, can't send PDF file". If you send after, your browser may display a blank page.

Tiêu đề, chân trang, ngắt trang và hình ảnh

Phá vỡ dòng và màu sắc

from fpdf import FPDF

class PDF(FPDF):
    def header(self):
        # Logo
        self.image('logo_pb.png', 10, 8, 33)
        # Arial bold 15
        self.set_font('Arial', 'B', 15)
        # Move to the right
        self.cell(80)
        # Title
        self.cell(30, 10, 'Title', 1, 0, 'C')
        # Line break
        self.ln(20)

    # Page footer
    def footer(self):
        # Position at 1.5 cm from bottom
        self.set_y(-15)
        # Arial italic 8
        self.set_font('Arial', 'I', 8)
        # Page number
        self.cell(0, 10, 'Page ' + str(self.page_no()) + '/{nb}', 0, 0, 'C')

# Instantiation of inherited class
pdf = PDF()
pdf.alias_nb_pages()
pdf.add_page()
pdf.set_font('Times', '', 12)
for i in range(1, 41):
    pdf.cell(0, 10, 'Printing line number ' + str(i), 0, 1)
pdf.output('tuto2.pdf', 'F')

Phá vỡ dòng và màu sắc

Cài đặt phần ghi chú

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

Thử nghiệm

Sau khi bao gồm tệp thư viện, chúng tôi tạo một đối tượng FPDF. 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:

Phá vỡ dòng và màu sắc

Cài đặt phần ghi chú

from fpdf import FPDF

title = '20000 Leagues Under the Seas'

class PDF(FPDF):
    def header(self):
        # Arial bold 15
        self.set_font('Arial', 'B', 15)
        # Calculate width of title and position
        w = self.get_string_width(title) + 6
        self.set_x((210 - w) / 2)
        # Colors of 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)
        # Thickness of frame (1 mm)
        self.set_line_width(1)
        # Title
        self.cell(w, 9, title, 1, 1, 'C', 1)
        # Line break
        self.ln(10)

    def footer(self):
        # Position at 1.5 cm from bottom
        self.set_y(-15)
        # Arial italic 8
        self.set_font('Arial', 'I', 8)
        # Text color in gray
        self.set_text_color(128)
        # Page number
        self.cell(0, 10, 'Page ' + str(self.page_no()), 0, 0, 'C')

    def chapter_title(self, num, label):
        # Arial 12
        self.set_font('Arial', '', 12)
        # Background color
        self.set_fill_color(200, 220, 255)
        # Title
        self.cell(0, 6, 'Chapter %d : %s' % (num, label), 0, 1, 'L', 1)
        # Line break
        self.ln(4)

    def chapter_body(self, name):
        # Read text file
        with open(name, 'rb') as fh:
            txt = fh.read().decode('latin-1')
        # Times 12
        self.set_font('Times', '', 12)
        # Output justified text
        self.multi_cell(0, 5, txt)
        # Line break
        self.ln()
        # Mention in italics
        self.set_font('', 'I')
        self.cell(0, 5, '(end of excerpt)')

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

pdf = PDF()
pdf.set_title(title)
pdf.set_author('Jules Verne')
pdf.print_chapter(1, 'A RUNAWAY REEF', '20k_c1.txt')
pdf.print_chapter(2, 'THE PROS AND CONS', '20k_c2.txt')
pdf.output('tuto3.pdf', 'F')

Phá vỡ dòng và màu sắc

Cài đặt phần ghi chú

Phương pháp được sử dụng để in các đoạn văn là multi_cell. Mỗi lần một dòng đạt đến cực bên phải của ô hoặc ký tự trở lại vận chuyển được đáp ứng, việc phá vỡ dòng được phát hành và một ô mới tự động được tạo theo hiện tại. Văn bản là hợp lý theo mặc định.

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.

Cài đặt phần ghi chú

Trước đây, để nhập đối tượng, bạn nên sử dụng gói PYFPDF:

from pyfpdf import FPDF

Sau phiên bản 1.7, để nhập nó, bạn nên sử dụng gói FPDF:

from fpdf import FPDF

Làm cách nào để đặt trang phá vỡ trang trong fpdf?

PHP yêu cầu ('fpdf. PHP');$ pdf = new fpdf ('p', 'mm', 'a5');$ pdf-> addpage ('p');$ pdf-> setDisplayMode (thực, 'mặc định');$ pdf-> setfont ('arial', '', 10);$ txt = file_get_contents ('Nhận xét.$pdf = new FPDF('P','mm','A5'); $pdf->AddPage('P'); $pdf->SetDisplayMode(real,'default'); $pdf->SetFont('Arial','',10); $txt = file_get_contents('comments.

FPDF trong Python là gì?

FPDF là gì?PYFPDF là một thư viện trong Python, nó được sử dụng để tạo tài liệu tệp PDF.Nếu chúng ta nói về tính năng thì chúng ta có thể tùy chỉnh như chúng ta có thể sửa đổi định dạng trang, lề, đơn vị, ngắt dòng tự động và nhiều hơn nữa.a library in Python, it is used for pdf file document generation. If we talk about the feature then we can customize like we can modify the page format, margin, unit, automatic line break and more.

Làm cách nào để cài đặt fpdf?

Installation..
Sử dụng pypi ..
Sử dụng EasyInstall C: \ Python27 \ Scripts \ Easy_install.exe FPDF ..
Từ nguồn: Tải xuống và giải nén Gói nguồn (ZIP) hoặc kéo từ kho lưu trữ.Chạy cài đặt Python Setup.py ..
Sử dụng trình cài đặt MSI hoặc Windows ..