メインコンテンツへスキップ
見出し画像

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を使ってレイアウトを定義できるというのがかなり便利ですね。
    さて、次回は何をやりたいのかをきちんと明かしてツールとして作り込んでいきます。それではまたお会いしましょう。


     
     
    モノづくりが趣味。 "売ってないなら自分で作ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワーク 全部やります。 記事執筆はAI不使用。 ご連絡や利用規約はプロフィール記事参照。

    あなたへのおすすめ