やっぱりwkhtmltopdfを使うのが一番簡単。reportlabとか重すぎる。Linuxで使う場合は日本語対応フォントのインストールをお忘れなく。
で、wkhtmltopdfのPythonラッパーライブラリがある。
pdfkit 0.5.0 : Python Package Index
$ pip3 install pdfkit
Flaskで使うとこんな感じ
pdf_title = "日本語ファイル名どんと来い" #適当に20件ユーザー取得 users = User.query.limit(20).all() import pdfkit #Blueprintを使っているのでcuurent_appで取得する template = current_app.jinja_env.get_template('pdf/user.html') #Falseはファイルを作成しないでストリームにするフラグ pdf_buf = pdfkit.from_string(template.render(users=users), False) response = make_response(pdf_buf) dispostion = "attachment; filename*=UTF-8''" #日本語をUrlエンコード dispostion += urllib.parse.quote(pdf_title + '.pdf') response.headers['Content-Disposition'] = dispostion response.mimetype = 'application/pdf' return response
ちゃんと文字コードを与えれば日本語ファイル名も文字化けしないよん。