昨天發現字體問題,pdf會是亂碼,
今天來修改一下,
改用中文字體 (TTF),用macOS內建的PingFang,然後在 reportlab 裡註冊,這樣就能正常顯示中文。
以下只顯示新增跟修改的部分
上方先導入
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
import os
在此註冊中文字體
def save_as_pdf(filename, text):
font_path = "/System/Library/Fonts/Supplemental/PingFang.ttc"
if os.path.exists(font_path):
pdfmetrics.registerFont(TTFont("PingFang", font_path))
font_name = "PingFang"
else:
如果不適用 PingFang(中文) ,就 fallback 回到 Helvetica(英文用)
font_name = "Helvetica"
c = canvas.Canvas(filename, pagesize=A4)
c.setFont(font_name, 12)
width, height = A4
y = height - 50
for line in text.split("\n"):
c.drawString(50, y, line)
y -= 20
if y < 50:
換頁
c.showPage()
c.setFont(font_name, 12)
y = height - 50
c.save()