どうも、学生エンジニアのirohasです。
本日は、複数の画像をPDFにして送りたいときに手動でやるのは手間だなぁと思ったので、Pythonを使って自動でPDFにしてくれるプログラムを作っってみました。
まずは、コードを走らせるにあたって必要なライブラリたちを紹介します。
img2pdf ・・・画像をPDfにするための外部ライブラリです。
glob ・・・ディレクトリから目的のものを取得する際に使う標準ライブラリです。
natsort・・・画像を自然順にソートするための外部ライブラリです。
上記の通り、img2pdfとnatsortは外部ライブラリですので、インストールしてない方はまずインストールしてください。
pip install img2pdf
pip install natsort
上記のライブラリをインストールしたら、いよいよコードを書いていきます。
まず先に今回使用したコードを紹介します。
import img2pdf
import glob
from natsort import natsorted #PDF化する際に画像を自然順にするため
# PDf化させたい画像を一括で取得
lists = list(glob.glob("画像が格納されているパス/*.jpg"))
# PDFファイル出力
pdfpath = "適当な名前.pdf"
with open(pdfpath,"wb") as f:
f.write(img2pdf.convert([str(i) for i in natsorted(lists) if ".jpg" in i]))
まず、globでワイルドカードを使用して画像が格納されているパス内の指定した拡張子の画像を一括で取得します。
その後、出力する際のPDF名を指定し、with open関数を用いてpdfファイルを作成するだけです。
なお、pdfのパスを指定したフォルダに保存したい場合は、パスを指定するのを忘れないでください。
個人的に作成してみた感想としてはたった数行でpdfにすることができるんだなと感心しました。
これ以降はこのコードを書き替えて走らせるだけでPDFが作成できるので、かなり便利だと感じています。
※注意点
.jpgの際は関係ないのですが、.pngの画像をpdf化させる際はpngファイルに透過チャンネルがある場合、 img2pdf.AlphaChannelError: Refusing to work on images with alpha channel
というエラーが出るのでそこの対応が必要になります。