iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 3
0

開始使用 ReportLab

第一個就是Hello World,來產生一個文字是Hello World吧

說明:
SimpleDocTemplate(): 第一個參數是檔案名稱
Paragraph(): 顯示文字

程式碼

from reportlab.platypus import SimpleDocTemplate, Paragraph

fileName = "example.pdf"
# 建立一個物件,給檔案路徑
pdfTemplate = SimpleDocTemplate(fileName)
story = []
# 加入一個段落文字
story.append(Paragraph("Hello World"))

# 產生PDF
pdfTemplate.build(story)

就會產生一個example.pdf,顯示Hello World

輸出結果

就完成了一個有Hello World 的PDF


來顯示中文字 "你好世界"
加上

...
story.append(Paragraph("你好世界")) 
...

輸出結果,預設字體沒辦法顯示中文,就會變成黑色框框

所以要加入新的字體
這裡用標楷體,放在font/kaiu.ttf

完整程式

from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.platypus import SimpleDocTemplate, Paragraph
# 拿預設的樣式
styles = getSampleStyleSheet()

styleNormalCustom = ParagraphStyle(
    'styleNormalCustom',
    fontName='kaiu',
    parent=styles["Normal"],
)

pdfmetrics.registerFont(TTFont('kaiu', "font/kaiu.ttf"))

fileName = "example.pdf"
pdfTemplate = SimpleDocTemplate(fileName)
story = []
story.append(Paragraph("Hello World"))
story.append(Paragraph("你好世界", styleNormalCustom))
pdfTemplate.build(story)


輸出結果,就可以正常顯示中文字


參考資料:

如果有任何寫得不好的地方,請跟我說,謝謝。


上一篇
[Day 02] 環境安裝
下一篇
[Day 04] 樣式(Style)
系列文
用 Python 玩 PDF,結合Django 變成一個網頁系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
paulyiu
iT邦新手 5 級 ‧ 2021-07-12 16:46:44

想問一下大大標楷體怎麼弄

我要留言

立即登入留言