Pythonでweasyprintを用いてHTMLをPDFに変換する

Pythonでweasyprintを用いてHTMLをPDFに変換してみます。

今回は、weasyprintを用います。このライブラリは、Pythonの標準ライブラリ・モジュールではありませんので、事前にインストールする必要があります。

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)

■weasyprintを用いてHTMLをPDFに変換する

では、早速、weasyprintを用いてHTMLをPDFに変換するスクリプトを書いていきます。

■コード

from weasyprint import HTML
HTML('https://laboratory.kazuuu.net/').write_pdf('test_p.pdf')

「from import」でweasyprintのHTMLを呼び出します。その後、HTML()を用います。括弧内には引数,パラメータとしてHTMLを渡します。今回は当サイトのURLを指定します。次に”.”(ドッド)を用いてwrite_pdf()を用います。括弧内には引数,パラメータとして変換されたPDFを保存する場所の指定と、pdfファイルの名前を渡します。今回は「test_p.pdf」というPDFファイルの名前を指定します。保存される場所は、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)になります。

■実行・検証

このスクリプトを「w_pdf.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

Traceback (most recent call last):
  File "w_pdf.py", line 1, in 
    from weasyprint import HTML
  File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\weasyprint\__init__.py", line 325, in 
    from .css import preprocess_stylesheet  # noqa isort:skip
  File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\weasyprint\css\__init__.py", line 27, in 
    from . import computed_values, counters, media_queries
  File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\weasyprint\css\computed_values.py", line 16, in 
    from ..text.ffi import ffi, pango, units_to_double
  File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\weasyprint\text\ffi.py", line 404, in 
    gobject = _dlopen(
  File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\weasyprint\text\ffi.py", line 391, in _dlopen
    return ffi.dlopen(names[0])  # pragma: no cover
  File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\cffi\api.py", line 150, in dlopen
    lib, function_cache = _make_ffi_library(self, name, flags)
  File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\cffi\api.py", line 832, in _make_ffi_library
    backendlib = _load_backend_lib(backend, libname, flags)
  File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\cffi\api.py", line 827, in _load_backend_lib
    raise OSError(msg)
OSError: cannot load library 'gobject-2.0-0': error 0x7e.  Additionally, ctypes.util.find_library() did not manage to locate a library called 'gobject-2.0-0'

実行してみると「OSError」というエラーが出力され実行することができませんでした。その後、エラー内容を確認し、調べてみると「gobject-2.0-0」というライブラリがloadできないことが原因だと判明しました。この原因を解決するために、weasyprint(https://doc.courtbouillon.org/weasyprint/stable/first_steps.html)のドキュメントにも書かれている、GTK(https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases)をWindows10にインストールすることにしました。

インストール後、再度スクリプトを実行してみます。

実行してみると、変換後に変換したことを完了という文字列を出力させる指示などはスクリプトに記述していないので、何も出力されません。

出力されませんが、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)を確認すると、「test_p.pdf」というPDFファイルが作成されていることが確認できました。

このPDFファイルを開いてみると、今回指定したHTML(Webサイト)がPDF形式に変換されていることが確認できました。

コメント

タイトルとURLをコピーしました