1. 在 PDF 中新增文字與標題的基礎知識
在 ReportLab 中,文字是透過 canvas 物件來新增的,該物件提供設定字型、顏色、大小及位置的方法。
建立簡單的 PDF,包含標題與文字
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
# 建立新 PDF
pdf_file = canvas.Canvas("styled_text.pdf", pagesize=A4)
width, height = A4
# 新增標題
pdf_file.setFont("Helvetica-Bold", 20)
pdf_file.drawString(100, height - 100, "銷售報告")
# 新增主要內容文字
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "此文件包含上一季度的銷售數據資訊。")
# 儲存 PDF
pdf_file.save()
這段程式碼生成了一個包含標題與文字的 PDF 檔。我們使用 setFont() 方法來設定文字的字型與大小。
2. 文字樣式設計與格式化
在 ReportLab 中,你可以透過調整字型、顏色與大小來設計樣式化的標題與主要內容,這幫助結構化文件並提高可讀性。
改變文字的字型與大小
ReportLab 支援標準字型,例如 Helvetica、Times-Roman 與 Courier。你可以透過 setFont() 指定字型的樣式(正常、粗體或斜體)與大小。
pdf_file.setFont("Helvetica-Bold", 18) # 粗體標題
pdf_file.drawString(100, height - 50, "主要標題")
pdf_file.setFont("Helvetica-Oblique", 14) # 斜體副標題
pdf_file.drawString(100, height - 80, "副標題: 季度總結")
更改文字顏色
你可以使用 setFillColorRGB() 方法改變文字顏色,此方法接受 0 至 1 之間的 RGB 值。
pdf_file.setFillColorRGB(0.2, 0.4, 0.6) # 藍色文字
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 110, "此文字具有藍色背景。")
你也可以使用來自 reportlab.lib.colors 的預定義顏色。
from reportlab.lib import colors
pdf_file.setFillColor(colors.red)
pdf_file.drawString(100, height - 140, "紅色文字")
3. 對齊與多行文字
若文字過長,最好將其拆分成多行格式。ReportLab 提供 TextObject 類別,其支援自動換行。
使用 TextObject 處理多行文字
text = """
報告包含過去三個月的銷售分析。
我們分析了變化及其對公司總體增長的影響。
"""
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)
這段程式碼創建了一個包含多行文字的文字區塊,每行文字都被新增至 PDF。使用 TextObject 很適合長篇文字,因為它提供了自動格式化的功能。
4. 使用段落進行文字樣式化
reportlab.platypus 模組中的 Paragraph 類別允許你新增支援 HTML 標籤格式的樣式化文字標籤,例如 <b>、<i> 與 <u>。Paragraph 也支援對齊與縮排,非常適合建立格式化文字。
使用 Paragraph 建立段落
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import SimpleDocTemplate, Paragraph
# PDF 設定
doc = SimpleDocTemplate("styled_paragraphs.pdf", pagesize=A4)
styles = getSampleStyleSheet()
elements = []
# 使用粗體與斜體文字建立段落
text = "銷售報告
2023 年季度報告"
paragraph = Paragraph(text, styles["Title"])
elements.append(paragraph)
# 新增主要文字
main_text = """
該報告包含了上一季度的主要銷售數據,以及銷售對公司總收入的影響分析。
"""
paragraph = Paragraph(main_text, styles["BodyText"])
elements.append(paragraph)
# 建立 PDF
doc.build(elements)
此處我們使用 Paragraph 新增格式化文字,包含用於樣式化的 HTML 標籤(如粗體與斜體文字)。getSampleStyleSheet() 提供標準樣式,例如 Title 與 BodyText,你可以根據需求進行修改。
5. 文字樣式的應用
ReportLab 支援創建及自訂樣式,這對於需要在報告中多次重複使用標題、子標題及主要文字的格式化非常實用。
自訂樣式的設定
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import ParagraphStyle
from reportlab.platypus import SimpleDocTemplate, Paragraph
# PDF 設定
doc = SimpleDocTemplate("custom_styles.pdf", pagesize=A4)
elements = []
# 創建自訂樣式
custom_style = ParagraphStyle(
name="CustomStyle",
fontName="Helvetica-Bold",
fontSize=14,
leading=18,
textColor=colors.darkgreen,
spaceAfter=10,
)
# 使用自訂樣式新增段落
paragraph = Paragraph("這是帶有自訂樣式的標題", custom_style)
elements.append(paragraph)
# 新增主要文字
default_style = ParagraphStyle(
name="Default",
fontName="Helvetica",
fontSize=12,
leading=14,
textColor=colors.black,
spaceAfter=10,
)
paragraph = Paragraph("這是使用標準樣式的主要文字。", default_style)
elements.append(paragraph)
# 建立 PDF
doc.build(elements)
在此範例中,我們創建了一個自訂樣式 CustomStyle,使用綠色文字與較大的字體,並應用於標題。
GO TO FULL VERSION