1. Cơ bản về thêm văn bản và tiêu đề trong PDF
Trong ReportLab, văn bản được thêm bằng đối tượng canvas
, cung cấp các phương pháp để thiết lập phông chữ, màu sắc, kích thước và vị trí của văn bản.
Tạo PDF đơn giản với tiêu đề và văn bản
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
# Tạo PDF mới
pdf_file = canvas.Canvas("styled_text.pdf", pagesize=A4)
width, height = A4
# Thêm tiêu đề
pdf_file.setFont("Helvetica-Bold", 20)
pdf_file.drawString(100, height - 100, "Báo cáo doanh số")
# Thêm văn bản chính
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "Tài liệu này chứa thông tin về doanh số trong quý vừa qua.")
# Lưu PDF
pdf_file.save()
Mã trên tạo một tệp PDF chứa tiêu đề và văn bản chính. Chúng ta thiết lập phông chữ và kích thước văn bản bằng phương pháp setFont()
.
2. Định dạng và tạo kiểu cho văn bản
Trong ReportLab, bạn có thể thay đổi màu sắc, phông chữ và kích thước văn bản để tạo tiêu đề và nội dung chính phong cách hơn. Điều này giúp tài liệu được cấu trúc tốt hơn và dễ đọc hơn.
Thay đổi phông chữ và kích thước văn bản
ReportLab hỗ trợ các phông chuẩn như Helvetica
, Times-Roman
và Courier
. Bạn có thể chỉ định kiểu phông (thường, đậm hoặc nghiêng) và kích thước bằng setFont()
.
pdf_file.setFont("Helvetica-Bold", 18) # Tiêu đề với phông chữ đậm
pdf_file.drawString(100, height - 50, "Tiêu đề chính")
pdf_file.setFont("Helvetica-Oblique", 14) # Phụ tiêu đề với phông chữ nghiêng
pdf_file.drawString(100, height - 80, "Phụ tiêu đề: Kết quả quý")
Thay đổi màu sắc văn bản
Bạn có thể thay đổi màu sắc của văn bản bằng phương pháp setFillColorRGB()
, phương pháp này chấp nhận giá trị RGB từ 0 đến 1.
pdf_file.setFillColorRGB(0.2, 0.4, 0.6) # Màu xanh
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 110, "Văn bản này có màu xanh.")
Bạn cũng có thể sử dụng các màu đã được định sẵn từ reportlab.lib.colors
.
from reportlab.lib import colors
pdf_file.setFillColor(colors.red)
pdf_file.drawString(100, height - 140, "Văn bản màu đỏ")
3. Căn lề và văn bản nhiều dòng
Nếu văn bản dài, tốt hơn là hiển thị nó dưới dạng nhiều dòng. ReportLab cung cấp lớp TextObject
, hỗ trợ tự động ngắt dòng.
Văn bản nhiều dòng với TextObject
text = """
Báo cáo chứa phân tích doanh số bán hàng trong ba tháng vừa qua.
Chúng tôi xem xét sự thay đổi và tác động của chúng đến sự tăng trưởng của công ty.
"""
text_object = pdf_file.beginText(100, height - 180)
text_object.setFont("Helvetica", 12)
text_object.setFillColor(colors.darkblue)
for line in text.split("\n"):
text_object.textLine(line)
pdf_file.drawText(text_object)
Mã này tạo ra một khối văn bản với nhiều dòng, mỗi dòng được thêm vào PDF. Sử dụng TextObject
rất tiện lợi cho văn bản dài vì nó hỗ trợ tự định dạng.
4. Sử dụng đoạn văn để định dạng văn bản
Lớp Paragraph
từ module reportlab.platypus
cho phép thêm văn bản được định dạng với hỗ trợ các thẻ HTML, chẳng hạn như <b>
, <i>
, và <u>
. Paragraph
cũng hỗ trợ căn lề và khoảng cách, điều này làm cho nó lý tưởng để tạo văn bản định dạng.
Tạo đoạn văn với Paragraph
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import SimpleDocTemplate, Paragraph
# Cài đặt PDF
doc = SimpleDocTemplate("styled_paragraphs.pdf", pagesize=A4)
styles = getSampleStyleSheet()
elements = []
# Tạo đoạn văn với văn bản đậm và nghiêng
text = "Báo cáo doanh số
Báo cáo quý năm 2023"
paragraph = Paragraph(text, styles["Title"])
elements.append(paragraph)
# Thêm văn bản chính
main_text = """
Báo cáo này chứa dữ liệu quan trọng về doanh số bán hàng trong quý vừa qua,
cũng như phân tích ảnh hưởng của doanh số đến thu nhập tổng thể của công ty.
"""
paragraph = Paragraph(main_text, styles["BodyText"])
elements.append(paragraph)
# Xây dựng PDF
doc.build(elements)
Ở đây, chúng tôi sử dụng Paragraph
để thêm văn bản được định dạng, bao gồm các thẻ HTML để tạo kiểu (chữ đậm và nghiêng). getSampleStyleSheet()
cung cấp các kiểu mẫu cơ bản, như Title
và BodyText
, có thể được tùy chỉnh.
5. Áp dụng định dạng riêng
ReportLab cho phép bạn tạo và tùy chỉnh phong cách của riêng mình, có thể sử dụng để định dạng văn bản. Điều này đặc biệt hữu ích khi tạo báo cáo có sử dụng kiểu lặp lại cho tiêu đề, phụ đề và văn bản chính.
Tạo phong cách riêng
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import ParagraphStyle
from reportlab.platypus import SimpleDocTemplate, Paragraph
# Cài đặt PDF
doc = SimpleDocTemplate("custom_styles.pdf", pagesize=A4)
elements = []
# Tạo phong cách riêng
custom_style = ParagraphStyle(
name="CustomStyle",
fontName="Helvetica-Bold",
fontSize=14,
leading=18,
textColor=colors.darkgreen,
spaceAfter=10,
)
# Tạo đoạn văn với phong cách riêng
paragraph = Paragraph("Đây là tiêu đề với phong cách riêng", custom_style)
elements.append(paragraph)
# Thêm văn bản chính
default_style = ParagraphStyle(
name="Default",
fontName="Helvetica",
fontSize=12,
leading=14,
textColor=colors.black,
spaceAfter=10,
)
paragraph = Paragraph("Đây là văn bản chính sử dụng phong cách mặc định.", default_style)
elements.append(paragraph)
# Xây dựng PDF
doc.build(elements)
Ví dụ này chúng tôi tạo một phong cách CustomStyle
với màu xanh lá cây cho văn bản và phông chữ lớn hơn, áp dụng cho tiêu đề.
6. Tạo tài liệu với tiêu đề và văn bản
Để tài liệu PDF có cấu trúc, bạn có thể tạo báo cáo nhiều trang với các phần, mỗi phần có tiêu đề và văn bản được định dạng riêng.
GO TO FULL VERSION