Pythonで画像ファイルをPDFにまとめる

画像を一冊のファイルにまとめたい、今回はそんな画像をまとめてPDFを作成したときのメモです。

もくじ:

はじめに

画像からPDFへの変換にはサードパーティ製のimg2pdfモジュールが手軽で便利です。今回の目的にはimg2pdf.convert()一発です。

モジュールがインストールされていない場合はpipで導入できます。PillowやPDFリーダ・ライタなど依存モジュールも自動的に入ります。

1. 画像ファイルをPDFに変換する

基本的にはimg2pdf.convert()の返す値をバイナリモードでファイルに書き込めばOK。
img2pdf.convert()の引数としては画像ファイルのパス文字列(str)や、それらパス文字列のリストの他、ファイルなどのストリームを受け付けるようです。

今回は指定したディレクトリにある画像ファイルを一括して、単一のPDFにまとめる処理をやりたいので、パスのリストを渡します。

1.1 画像ファイルパスの取得

img2pdfはJPEGやPNG(ただしアルファチャネルなし)を読めるようですので、指定されたディレクトリの直下にあるファイルの拡張子を調べてパスのリスト(サンプルではimages_)を作ります。
直下だけでなく階層を辿ってリストを作成したい場合にはos.walk()globモジュールを使って下さい。

また、出力されるPDFデータは対象のディレクトリと同じ階層に同名のファイル名を付けて保存することにします。

1.2 出力の調整

特に指定しなければ、img2pdfは入力された画像データのサイズなどそのまま出力しようとしますが、明示的に指定することもできます。

ページのサイズを明示的に指定するには、layout_funを指定します。具体的にはimg2pdfモジュールにあるget_layout_fun()関数を使います。

ここではmm(ミリメートル)をポイントに換算してpagesizeを指定します。

2. サンプル

今回のサンプルです。

おわり。