reportlab の Table で日本語を使う

reportlab の Table で日本語を使う方法です。
次のような PDF を作成します。
![reportlab_feb0201.png](https://qiita-image-store.s3.amazonaws.com/0/179446/2b22c7f2-1a3f-abfb-88fa-3a20040e6f32.png)

```py: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")
# ------------------------------------------------------------------
```

実行方法

```bash
./simple_table.py out01.pdf
```

もう少し複雑な次のような PDF を作成するサンプルです。
![table_feb0202.png](https://qiita-image-store.s3.amazonaws.com/0/179446/6b8cbf5e-9a03-d567-8fb3-7114484f8e8b.png)

```py: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('サンプル その２',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 の表示位置をコントロールする](https://qiita.com/ekzemplaro/items/09bd10b02ecbb35c0efa)
[reportlab の Table のセルの結合をする](https://qiita.com/ekzemplaro/items/3513db87d7bde0cd8388)