PythonでPDF出力を試してみる
こんにちは!TRUSTART株式会社のgoaです!
PDF出力機能を実装するため、今回はPDF生成の実現方法について調べてみました!
PythonのPDF生成ライブラリの主なアプローチ
まず、PythonのPDF生成ライブラリを調べてみると、大きく分けて2つのアプローチがあることが分かりました。
-
HTML/CSSベース
HTMLとCSSでPDFの見た目を作り、それをPDFに出力します。
WeasyPrint, xhtml2pdfなどのライブラリがこちらになります。 -
Pythonコードベース
Pythonのコードでレイアウトを作り、PDFに出力します。座標(x, y)を指定してテキストなどを描画していくイメージでした。
ReportLabやfpdf2などのライブラリがこちらになります。
個人的な意見として、ある程度知見のあるHTML/CSSで見た目を作れる点と弊社でよく使用するDjangoのテンプレートと組み合わせることで動的な対応もしやすそうという点からHTML/CSSベースを試してみようと思います。
HTML/CSSベースを試してみる
それでは、HTML/CSSベースのライブラリの中から、調べていく中でよく名前が挙がっていた WeasyPrint と xhtml2pdf の2つを簡単に比較して、どちらを試すか決めていきたいと思います。
まずは、GitHubのスター数の推移を見てみます。
グラフを見てみると、近年ではWeasyPrintの方がより多くのスターを集めています。
また、両方のドキュメントを少し眺めてみましたが、どちらも充実している印象でした。
そこで、今回はGitHubスター数の評価からWeasyPrintを試してみようと思います。
インストール
それでは、WeasyPrintをインストールしていきます。
公式ドキュメントを参考に、インストールを進めます。
今回は、私が使っているmacOS環境で、一番手軽そうなHomebrewを使ってインストールしました。ターミナルで以下のコマンドを実行します。
brew install weasyprint
PDF化するHTMLを用意する
次に、PDFに変換するための元となるHTMLとCSSを用意します。
今回はサンプルとして、弊社の採用ページの一部を抜粋して、簡単なHTMLファイル(trustart_page.html
)を作成しました。CSSも用意して、簡単なスタイリングを当てています。
※Geminiに即席でHTML, CSSを作成してもらったのでコードの掲載は控えますが、ブラウザ表示は以下のようになっています。
サンプルコード
HTMLの見た目ができたので、PDFを生成するコードを用意します。
trustart_page.html
と同じ階層にPDF生成を実行するファイル(create_pdf.py
)を配置します。
from weasyprint import HTML
# 読み込むHTMLファイル
html_filename = 'trustart_page.html'
# 出力するPDFファイル名
output_filename = 'trustart_page.pdf'
# WeasyPrintでHTMLオブジェクトを作成
html = HTML(filename=html_filename)
# PDFをファイルに書き出す
html.write_pdf(output_filename)
生成されたPDF
上記のコードを実行すると、create_pdf.py
と同じ階層に trustart_page.pdf
というファイルが生成されました。
以下のようにPDFとして出力されています!
おわりに
今回は、PythonのPDF生成ライブラリWeasyPrintを使って、HTMLとCSSからPDFを作成する方法を試してみました。
Homebrewを使ったmacOSへのインストールを試しましたが、Dockerなど他の環境で導入する際は、依存ライブラリのインストールが必要になりそうなので、調査したいと思います。また、最終的にはDjangoテンプレートなどと連携させて動的なPDFを作成したいと考えているので、そちらも引き続き調査したいと思います!
TRUSTART株式会社は、一緒に働くメンバーを募集しています!
インターンメンバーも大募集中です!
興味を持っていただいた方は、ぜひ弊社のページをご確認ください!!!

「人とデータで全てを可能にする」 不動産領域に関連する、あらゆるビジネスのDX化にチャレンジし、「テクノロジー×人」の力で社会課題を解決するTRUSTART株式会社のテックブログです! 採用情報はこちら:trustart.co.jp/recruit/
Discussion