連番画像をフォルダ毎にpdfファイルに固める

作ったもの

プログラムで指定したディレクトリに存在するフォルダ毎に、連番画像ファイルを1つのpdfファイルにまとめるプログラム。
なお、以下のページを参考に作成した(※)ので、詳細な説明は下記を参照。
qiita.com/meznat/items/31d947ed4826350fd9fa
(ほとんどそのままだが、手元の環境でうまく動かなかった部分と特定の拡張子の画像のみを対象とするような処理を追加した。)

作成した背景

pdfファイルにロゴを追加せよ、という指令が下った。その際に、以下の制約条件があった。

  • 画質はそこまでうるさく言わない
  • 元ファイル(word)が入手できない(探すのに時間がかかるため)
  • フォントデータは失われてもよい

そこで、pdfファイルを一旦画像ファイル化して、ロゴを挿入した後pdfに固めることとした。
本プログラムは作ったもので説明した通り、画像をpdfファイルに固めるプログラムである。

使い方

①以下のページの手順を参考に、各種ライブラリのインストールを行う。
qiita.com/meznat/items/31d947ed4826350fd9fa
→具体的には以下の2行を実行すればよい。

pip install img2pdf
pip install Pathlib

②以下のディレクトリ構成となるようファイル等を配置し、「img2pdf.py」を実行する。

  • ルートディレクトリ
    • img2pdf.py
    • ○○(処理対象画像を格納したフォルダ。「○○.pdf」が出力される。)
      • 001.png
      • 002.png
    • △△(「△△.pdf」が出力される。)
      • 001.png
      • 002.png

③プログラムの処理が終了すると、処理対象フォルダ名をもとにpdfファイルが出力される。

ソースコード(img2pdf.py)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import img2pdf#要インストール
from pathlib import Path#要インストール
import os

#以下のページを参考に作成した。
#https://qiita.com/meznat/items/31d947ed4826350fd9fa

def ImageToPdf(outputpath, imagepath,file_format):
    print(imagepath)
    lists = list(imagepath.glob("**/*"))#単フォルダ内を検索
    #pdfを作成
    with open(outputpath,"wb") as f:
        f.write(img2pdf.convert([str(i) for i in lists if i.match("*."+file_format)]))
        #複数の拡張子の画像をpdfに組み込む場合の処理は下記
        #f.write(img2pdf.convert([str(i) for i in lists if i.match("*.jpg") or i.match("*.png")]))
    print(outputpath.name + " :Done")

#このプログラムが格納されているディレクトリにあるフォルダ毎にpdfにまとめる
path = "./"
print(os.path.exists(path))
files = os.listdir(path)
print(files)
for i in files:
    if os.path.isdir(os.path.join(path, i)):
        print(Path(path+"/"+i+".pdf"))#出力するpdfファイル名
        ImageToPdf(Path(path+"/"+i+".pdf"), Path(path+"/"+i),"png")#処理対象の拡張子を最後の引数で指定

コメント