PythonでHTMLをPDF化してみた ~0からPDFを生成したいのでHTMLxCSSをweasyprintで変換~
こんにちはRcatです。
突然ですが、今回はHTMLをPythonを使ってPDFにしていきます。
次回はこちら
はじめに
利用規約
情報や作品の活用時は事前に利用規約をご確認ください。
https://note.com/rcat999/n/nb6a601a36ef5
コメントについて
利用規約のガイドラインを確認の上コメントしてください
概要
概要
さて、いきなりですが全自動でPDFを作りたいです。
調べた結果、Pythonコードで文字や位置を指定するか、HTMLを変換するかで方法が分かれるみたいです。
私はよくHTMLとCSSは使うので、それを使った方がレイアウトが簡単だと思ったので、HTMLを変換する方でやっていきます。
ちなみになんでこんなことをしたいのかは…それは次回です。
Pythonのインストール
本作はPythonでできています。
そのため、まずはPythonのインストールが必要です。
インストール方法については以下の記事で解説していますので、参考にしてください。
PDFに変換する
事前準備
まずはライブラリのインストールです
pip install weasyprintちなみに初回はこんなエラーが出ました
OSError: cannot load library 'libgobject-2.0-0': error 0x7e. Additionally, ctypes.util.find_library() did not manage to locate a library called 'libgobject-2.0-0'調べたところ下記をインストールすると出なくなるらしいのでインストールして解決しました。
時間が無いので詳しくは調べませんでしたが、GUIを作るための物らしいので危ないものではないでしょう。
https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases
HTMLを書く
とりあえずサンプルを書きます。私のいつも通りの書き方です。
で、こんな感じ。

これをブラウザで開くとこんな感じ
これでもう何やりたいかバレバレですね。
kindle端末と同じ3:4のサイズになるようにしてみました。

変換する
そして変換コードがこちら。
え、これだけ…。
ちなみに、HTMLは別ファイルになっているのでopenで読んでますが、直にStringで書いてもOKです。

出来上がったPDFがこちら。
いいですね☆。レイアウトがそのまま出てます。

さすがにつまらないのでもうちょい進む
一ページだけ作れても仕方ないので、複数ページにしましょう。
調べてみましたが、明示的にページを分離するのは難しそうなので、単ページ出力を後から結合する感じにします。
というわけでコードがこちら。少し前にpypdfで結合だけやってたのでそれをそのまま適用しました。
管理が煩雑になるのでクラス化しています。

できるPDFがこちら
きちんとファイルごとにページが分かれています。

まとめ
今回はPythonを使って、HTMLページをPDFに変換してみました。0からPDFを生成する前に、HTMLを使ってレイアウトを定義できるというのがかなり便利ですね。
さて、次回は何をやりたいのかをきちんと明かしてツールとして作り込んでいきます。それではまたお会いしましょう。
いいなと思ったら応援しよう!
情報が役に立ったと思えば、僅かでも投げ銭していただけるとありがたいです。