Python 学習ノート #3【自動PDF変換】

#1.きっかけ

昨日作成した自動ファイル名変換プログラムで図に命名することができた。
さらにそれぞれの図を連番フォルダに分けていくことができた。
しかし、それぞれの画像を参照しながら問題を解いていくと、どこを読んでいるかわからなくなってしまうことが多々あった。
なので、すべての図をPDFに変換して描画ツールの定規などを置いたり、マーカーで線を引くなどして対応したい。

そのため、この大量の図をPDFに変換する必要がある。
 
#2.作成

盛り込みたい機能

- それぞれのフォルダに分かれてしまっているのでフォルダ指定ができるようにする。
- 画像のタイプも指定できるようにしたい
- 生成するPDFの名称も指定したい。

以上の条件を満たすプログラムを作成していく。

##2-1.Pathを通す

まずは図が格納されているフォルダまでの経路をimg_pathに格納する。

```Auto_Make_PDF.py
print(r"例)C:\Users\Owner\Downloads")
img_path=input("PDFに変換したい画像が存在するパスを入力してください==>")
```

##2-2.ファイルタイプの指定

昨日作成したファイル名称変更プログラムから一部引用する。
そして、ファイルタイプを指定した場合は、該当の図をリストに追加しする。
ファイルタイプを指定しなかった場合は、既定を「JPG」とし、該当の図をリストに追加する。

```Auto_Make_PDF.py
import glob

#変換したいimgのPathを設定
print(r"例)C:\Users\Owner\Downloads")
img_path=input("PDFに変換したい画像が存在するパスを入力してください==>")

#ファイルのタイプを設定(規定：jpg)
print("例）png\tjpeg")
img_file_type=input("選択したい画像ファイルの拡張子を入力してください（規定：jpg）==>")
img_file_type="jpg" if img_file_type=="" else None    
img_list=glob.glob(img_path+"/*"+img_file_type)

print(("\n").join(img_list))
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2502107/41b16086-af01-c056-3c49-59a87c384c15.png)

指定したファイルパス下にあるJPGファイルを抽出しリストに登録することができた。

##2-3.ファイル名の指定

今回のセクションでは、以下の動作を実現したい

- 作成したIMGリストからPDFを作成していいか確認する動作
- PDFの名前を指定し変数に格納する
- 名前を決めるのがめんどくさい場合を想定し、既定名を設定しておく

```Auto_Make_PDF.py
import glob

#変換したいimgのPathを設定
print(r"例)C:\Users\Owner\Downloads")
img_path=input("PDFに変換したい画像が存在するパスを入力してください==>")

#ファイルのタイプを設定(規定：jpg)
print("例）png\tjpeg")
img_file_type=input("選択したい画像ファイルの拡張子を入力してください（規定：jpg）==>")
img_file_type="jpg" if img_file_type=="" else None    
img_list=glob.glob(img_path+"/*"+img_file_type)

#確認
print("{}件のファイルをPDFに変換します。".format(len(img_list)))
print("\n".join(img_list))

pdf_name=input("生成したいPDFの名前を入力してください（規定：output.pdf）==>")
pdf_name="output.pdf" if pdf_name=="" else None

print("{}を作成します。".format(pdf_name))
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2502107/1c38944d-c4a2-a2c0-361a-a775226d3fc1.png)

ここまでで、IMGPathの設定、拡張子の応用機能、ユーザーの確認、命名機能までを作成することに成功した。
これであとは画像をPDFに変換していくだけになった。

##2-4.Module Install

図のPDFへの変換には、Pythonの多くのmodule群の中でもimg2pdfというものが必要になる。
そのためにmoduleを自身のPythonにinstallする必要がある。
コマンドプロンプトを使用してpipコマンドを使用してinstallする。
現在の私のinstall済のmodule群は以下のものである。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2502107/431c8ea1-0b6a-e9c7-00e5-e5c2e364fee0.png)

pipコマンドでimg2pdfを指定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2502107/500a1bb1-b5e3-9cc0-575d-f6ff4d8b8a03.png)

これでimg2pdfが自身のmodule群に追加された。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2502107/e7e4595d-0266-b99f-bf22-2129d2e9e23d.png)

##2-5.PDF変換

あとは、img2pdfの引数にそれぞれを指定してあげればいいだけなので、
第一引数に最初に読み込んだimg_listたちを読み込んであげて、
その前のOpneにユーザー指定のPDF名とWorkbookの"wb"を指定してあげる。

```Auto_Make_PDF.py
import img2pdf
import glob

#変換したいimgのPathを設定
print(r"例)C:\Users\Owner\Downloads")
img_path=input("PDFに変換したい画像が存在するパスを入力してください==>")

#ファイルのタイプを設定(規定：jpg)
print("例）png\tjpeg")
img_file_type=input("選択したい画像ファイルの拡張子を入力してください（規定：jpg）==>")
img_file_type="jpg" if img_file_type=="" else None    
img_list=glob.glob(img_path+"/*"+img_file_type)

#確認
print("{}件のファイルをPDFに変換します。".format(len(img_list)))
print("\n".join(img_list))

pdf_name=input("生成したいPDFの名前を入力してください（規定：output.pdf）==>")
pdf_name="output.pdf" if pdf_name=="" else None
pdf_path=img_path+"/"+pdf_name
with open(pdf_path,"wb") as f:
    f.write(img2pdf.convert(img_list))
```

以上で完成である。
実行してみよう！

#3.実行結果

完成したプログラムを実際に動かした動画を撮影してみました。
図からPDFを作成することができました。
自身の業務効率化にまた一歩貢献出来ました。

<iframe width="926" height="579" src="https://www.youtube.com/embed/AUvOHPj4RD8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>