CodeGym /課程 /Python SELF TW /使用 ReportLab 為 PDF 文檔中的文字與標題進行樣式設計

使用 ReportLab 為 PDF 文檔中的文字與標題進行樣式設計

Python SELF TW
等級 44 , 課堂 3
開放

1. 在 PDF 中新增文字與標題的基礎知識

在 ReportLab 中,文字是透過 canvas 物件來新增的,該物件提供設定字型、顏色、大小及位置的方法。

建立簡單的 PDF,包含標題與文字

Python

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 支援標準字型,例如 HelveticaTimes-RomanCourier。你可以透過 setFont() 指定字型的樣式(正常、粗體或斜體)與大小。

Python

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 值。

Python

pdf_file.setFillColorRGB(0.2, 0.4, 0.6)  # 藍色文字
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 110, "此文字具有藍色背景。")

你也可以使用來自 reportlab.lib.colors 的預定義顏色。

Python

from reportlab.lib import colors

pdf_file.setFillColor(colors.red)
pdf_file.drawString(100, height - 140, "紅色文字")

3. 對齊與多行文字

若文字過長,最好將其拆分成多行格式。ReportLab 提供 TextObject 類別,其支援自動換行。

使用 TextObject 處理多行文字

Python

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 建立段落

Python

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() 提供標準樣式,例如 TitleBodyText,你可以根據需求進行修改。

5. 文字樣式的應用

ReportLab 支援創建及自訂樣式,這對於需要在報告中多次重複使用標題、子標題及主要文字的格式化非常實用。

自訂樣式的設定

Python

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,使用綠色文字與較大的字體,並應用於標題。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION