PythonのPDF関連のライブラリは、多い様で、PyPDF2やReportLabなどを使用した例の記事が多数ヒットしますが、これらのライブラリの更新はしばらく行われていない様です。
img2pdf
最近、img2pdfというライブラリが手軽かつ画像の再変換無しに使えるということで、日本語の紹介記事が多数書かれています。img2pdfでは、pdfの処理にpikepdfやpdfrwが用いられている様です。またpikepdfは、Python3.8にも対応するなど積極的に更新されています。参考リンク
Pythonで複数の画像を1つのPDFに変換する方法
複数の画像をPDFに変換するには、img2pdfというライブラリを使用します。同じフォルダ内の複数画像を1つのPDFにまとめる方法について書き留めておきます。
JPEG ファイルを再エンコード無しで PDF にしたい
JPEG ファイルを再エンコード無しで PDF にしたい 特にMacで。 Acrobat Pro DC で JPEG ファイルを PDF に変換するとどうも画像として再エンコードしてる風で、再エンコードなしでできるかどうかわからないので他に探す。 「img2pdf」が良さそう。
ただ、簡単に変換するという目的以外の細かい設定を解説しているサイトが見つからなかったので、少し細かい設定を試してみました。
画像ファイルは、左からゼロ埋めしたファイル名になったもの(001.png, 002.png, ...)を使用しました。
img2pdfを用いてタイトル、作成者、およびキーワードなどのプロパティを設定したPDFが作成可能です。
また、見開きや表示倍率、フルスクリーン表示などの設定もできます。
img2pdfをコマンドラインから使う際は、見開きなどの設定ができますが、img2pdf(version 0.4.0)のconvert関数を使うと上手くいかず手こずりました。
上記の通り、parse_layout関数を通すなどすると動きました。
恐らくバグだと思いますが誰もこの機能を使っていない為、指摘されていないのかも知れません。
問題点:TwoPageRight、TwoPageLeftに対応していない
ページレイアウトは、現在(img2pdf version 0.4.0)ではsingle:「単一ページ」に相当
onecolumn:「連続ページ」に相当
twocolumnright:「連続見開きページ(表紙)」に相当
twocolumnleft:「連続見開きページ」に相当
にしか対応していません。
img2pdf.py(「PageLayout」に関する部分)を少し書き換えれば、
TwoPageRight: 「見開きページ(表紙)」に相当
TwoPageLeft: 「見開きページ」に相当
にも対応されることができます。
問題点:R2L (右綴じ)に対応していない
pdfrwは対応している様なので、こちらとの併用が必要になるかと思います。
追記:2022/12/09
pikepdfで右綴じ変換のプログラムを作成されている方がいらっしゃったので、リンクを貼ります。
PythonとpikepdfでPDFを右綴じ(R2L)にする
PythonとpikepdfでPDFを右綴じ(R2L)にする. GitHub Gist: instantly share code, notes, and snippets.
続き
【Python】複数画像をPDFに変換する方法の比較