reportlab の Table で日本語を使う方法です。
次のような PDF を作成します。
simple_table.py
#! /usr/bin/python
#
# simple_table.py
#
# Feb/02/2019
# ------------------------------------------------------------------
import sys
from reportlab.lib import colors
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
# ------------------------------------------------------------------
sys.stderr.write ("*** 開始 ***\n")
file_pdf = sys.argv[1]
doc = SimpleDocTemplate(file_pdf, pagesize=letter)
pdfmetrics.registerFont(TTFont('TakaoMincho','/usr/share/fonts/OTF/TakaoMincho.ttf'))
elements = []
data= [['こんにちは', 'BB', 'CC', 'DD', '春'],
['おはよう', '11', '12', '13', '夏'],
['今晩は', '21', '22', '23', '秋'],
['さようなら', '31', '32', '33', '冬']]
tt=Table(data)
tt.setStyle(TableStyle([('BACKGROUND',(1,1),(-2,-2),colors.cyan),
('TEXTCOLOR',(0,0),(1,-1),colors.red),
('FONT', (0, 0), (-1, -1), "TakaoMincho", 20),]))
elements.append(tt)
#
doc.build(elements)
sys.stderr.write ("*** 終了 ***\n")
# ------------------------------------------------------------------
実行方法
./simple_table.py out01.pdf
table_two.py
#! /usr/bin/python
#
# table_two.py
#
# Feb/02/2019
# ------------------------------------------------------------------
import sys
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib import colors
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle
from reportlab.platypus import Spacer
from reportlab.platypus import Paragraph
from reportlab.pdfbase.pdfmetrics import registerFont
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
from reportlab.lib.styles import ParagraphStyle
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.units import mm
# ------------------------------------------------------------------
def table_first(elements):
data= [['こんにちは', 'Good\nMorning', 'CC', 'DD', '春'],
['おはよう\nございます。', '11', '12', '13', '夏'],
['今晩は', '21', '22', '23', '秋'],
['さようなら', '31', '32', '33', '冬']]
tt=Table(data,colWidths=(60*mm, 40*mm, 20*mm,20*mm,20*mm),rowHeights=16*mm)
tt.setStyle(TableStyle([('BACKGROUND',(1,1),(-2,-2),colors.cyan),
('TEXTCOLOR',(0,0),(1,-1),colors.red),
('FONT', (0, 0), (-1, -1), "TakaoMincho", 16),
('GRID', (0, 0), (4, 4), 0.25, colors.black),]))
elements.append(Paragraph('Sample First',stylesheet['Title']))
elements.append(tt)
elements.append(Spacer(1,10*mm))
#
# ------------------------------------------------------------------
def table_second(elements):
data= [['テスト', 'Good\nAfternoon', 'CC', 'DD', '春'],
['おはよう\nございます。', '11', '12', '13', '夏'],
['今日は\n晴れています。', '21', '22', '23', '秋'],]
tt=Table(data,colWidths=(60*mm, 40*mm, 20*mm,30*mm,30*mm), rowHeights=20*mm)
tt.setStyle(TableStyle([('BACKGROUND',(1,1),(-2,-2),colors.magenta),
('TEXTCOLOR',(0,0),(1,-1),colors.blue),
('FONT', (0, 0), (-1, -1), "TakaoMincho", 20),
('GRID', (0, 0), (4, 4), 0.25, colors.black),]))
style = ParagraphStyle(
name='Normal',
fontName='TakaoMincho',
fontSize=16,
)
elements.append(Paragraph('サンプル その2',style))
elements.append(Spacer(1,10*mm))
elements.append(tt)
# ------------------------------------------------------------------
sys.stderr.write ("*** 開始 ***\n")
file_pdf = sys.argv[1]
stylesheet = getSampleStyleSheet()
doc = SimpleDocTemplate(file_pdf, pagesize=letter)
path_font = '/usr/share/fonts/OTF/TakaoMincho.ttf'
pdfmetrics.registerFont(TTFont('TakaoMincho',path_font))
#
elements = []
table_first(elements)
table_second(elements)
#
doc.build(elements)
sys.stderr.write ("*** 終了 ***\n")
# ------------------------------------------------------------------
参考ページ
reportlab の Table の表示位置をコントロールする
reportlab の Table のセルの結合をする