CodeGym /Các khóa học /Python SELF VI /Những điều cơ bản về tạo PDF với văn bản để tự động hóa b...

Những điều cơ bản về tạo PDF với văn bản để tự động hóa báo cáo

Python SELF VI
Mức độ , Bài học
Có sẵn

1. Những điều cơ bản về ReportLab

Làm việc với Canvas

Công cụ chính để tạo tài liệu PDF trong ReportLab là lớp canvas. Nó cung cấp các phương thức để thêm văn bản, đường kẻ, hình chữ nhật và các yếu tố đồ họa khác.

Tạo tệp PDF cơ bản với văn bản

Python

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4

# Tạo tệp PDF mới
pdf_file = canvas.Canvas("basic_report.pdf", pagesize=A4)
width, height = A4

# Thêm văn bản
pdf_file.setFont("Helvetica", 12)  # Cài đặt font và kích cỡ
pdf_file.drawString(100, height - 100, "Xin chào! Đây là báo cáo được tạo bằng ReportLab.")

# Lưu và đóng file PDF
pdf_file.save()

Trong ví dụ này, một tệp PDF cơ bản được tạo với văn bản "Xin chào! Đây là báo cáo được tạo bằng ReportLab." trên trang đầu tiên.

2. Thêm văn bản vào PDF

ReportLab cho phép tùy chỉnh văn bản linh hoạt, bao gồm kích thước, font và màu sắc. Điều này quan trọng trong việc tạo báo cáo có cấu trúc, vì tiêu đề, phụ đề và văn bản chính có thể được hiển thị khác nhau.

Cài đặt font và kích thước văn bản

Sử dụng phương thức setFont() để đặt font và kích thước văn bản. ReportLab hỗ trợ các font chuẩn như Helvetica, Times-RomanCourier.

Python

pdf_file.setFont("Helvetica-Bold", 16)  # Font đậm
pdf_file.drawString(100, height - 50, "Báo cáo doanh thu")  # Tiêu đề

Thay đổi màu văn bản

ReportLab hỗ trợ cài đặt màu văn bản bằng phương thức setFillColorRGB(), nhận các giá trị RGB từ 0 đến 1.

Python

pdf_file.setFillColorRGB(0, 0, 1)  # Màu xanh dương
pdf_file.drawString(100, height - 150, "Đoạn văn bản này có màu xanh dương.")

3. Làm việc với các khối văn bản và văn bản nhiều dòng

Nếu văn bản dài, bạn có thể định dạng nó thành một khối bằng cách sử dụng drawString() và chỉ định tọa độ cho từng dòng. Tuy nhiên, để tự động ngắt dòng văn bản, sử dụng drawText()TextObject tiện hơn.

Thêm văn bản nhiều dòng với TextObject

Python

text = """
Báo cáo doanh thu năm 2023.
Báo cáo này chứa thông tin chi tiết về doanh thu, phân tích dữ liệu và dự báo.
"""

# Tạo đối tượng văn bản
text_object = pdf_file.beginText(100, height - 200)
text_object.setFont("Helvetica", 12)
text_object.setFillColorRGB(0, 0, 0)

# Thêm văn bản
for line in text.split("\n"):
    text_object.textLine(line)

pdf_file.drawText(text_object)

Trong ví dụ này, một đối tượng văn bản TextObject được tạo để tự động ngắt dòng từng dòng văn bản.

4. Tạo báo cáo nhiều trang

Báo cáo nhiều trang cho phép hiển thị nhiều dữ liệu hơn và tạo cấu trúc tài liệu dễ đọc. Trong ReportLab, để chuyển sang trang mới, sử dụng phương thức showPage().

Tạo một tệp PDF nhiều trang

Python

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4

# Tạo PDF
pdf_file = canvas.Canvas("multi_page_report.pdf", pagesize=A4)
width, height = A4

# Trang 1
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Trang 1: Giới thiệu")
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "Đây là trang đầu tiên của báo cáo.")
pdf_file.showPage()  # Chuyển sang trang mới

# Trang 2
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Trang 2: Dữ liệu")
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "Đây là trang thứ hai của báo cáo.")

# Lưu và đóng PDF
pdf_file.save()

Trong ví dụ này, một tệp PDF được tạo với hai trang, mỗi trang có tiêu đề và văn bản riêng. Phương thức showPage() kết thúc trang hiện tại và bắt đầu trang mới.

5. Thêm dữ liệu động vào PDF

Để tự động hóa báo cáo, ReportLab cho phép thêm dữ liệu động, ví dụ, từ danh sách hoặc dictionary. Điều này hữu ích để tạo báo cáo có bảng hoặc danh sách dữ liệu có thể được cập nhật thường xuyên.

Thêm dữ liệu từ danh sách

Python

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4

data = [
    {"Tháng": "Tháng 1", "Doanh thu": 200},
    {"Tháng": "Tháng 2", "Doanh thu": 300},
    {"Tháng": "Tháng 3", "Doanh thu": 250},
]

pdf_file = canvas.Canvas("sales_report.pdf", pagesize=A4)
width, height = A4

# Tiêu đề
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Báo cáo doanh thu")

# Thêm dữ liệu
pdf_file.setFont("Helvetica", 12)
y_position = height - 150
for item in data:
    line = f"{item['Tháng']}: Doanh thu = {item['Doanh thu']}"
    pdf_file.drawString(100, y_position, line)
    y_position -= 20

# Lưu PDF
pdf_file.save()

Mã này tạo một tệp PDF, thêm dữ liệu doanh thu cho mỗi tháng thành các dòng riêng biệt.

6. Thêm hình ảnh

Bên cạnh văn bản, tài liệu PDF có thể chứa hình ảnh và đồ thị. Hãy thử thêm một hình ảnh:

Python

from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

def create_pdf_with_image(file_path):
    c = canvas.Canvas(file_path, pagesize=letter)
    width, height = letter

    c.drawString(100, height - 100, "Đây là nơi hình ảnh của bạn sẽ xuất hiện:")
    # Đường dẫn đến hình ảnh của bạn
    image_path = "example_image.jpg"
    c.drawImage(image_path, 100, height - 300, width=200, height=150)

    c.showPage()
    c.save()

file_path = "image_example.pdf"
create_pdf_with_image(file_path)

Thật dễ dàng phải không? Bây giờ chúng ta đã có một PDF với hình ảnh!

7. Thêm bảng vào PDF

...
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION