GIMPでPDFファイルをPNGファイルに変換する

COVID-19関連で省庁から提供される情報はpdfファイルが多く情報共有する際大量のページを可視化するために画像に変換する処理を手動で行うことが困難なためプラグインを作成しました。
[20220717更新](#追記)

以下に情報を共有します。

１．GIMPについて
---
GIMPとはフリー＆オープンソースの画像編集ソフトです。
https://www.gimp.org/

２．GIMPでPDFをPNGに変換するには
---
〇手動でpdfからpngに変換する場合
（１）GIMPを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277081/d7d72e33-874d-e19d-066e-24aa858d5865.png)

（２）pdfファイルをドラッグアンドドロップするとダイアログが表示されるので[インポート]をクリックします。（[ファイル]-[開く/インポート]で開いてもいいです）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277081/1ce6131f-5021-40a4-74fa-d5f42d5a90e7.png)

pdfが画像として読み込まれます。各ページはレイヤーとして読み込まれています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277081/6535a31e-421d-fabd-f036-a97127451555.png)

（３）[ファイル]-[名前を付けてエクスポート...]から拡張子をpngにしてエクスポートします。
ここでエクスポートされるのはレイヤーの一番上にある画像のみです。
これを毎回レイヤーを非表示にしながら繰り返します。

---
〇自動でpdfからpngに変換する場合
（１）まずpythonプラグインが利用できるか確認します。
https://docs.gimp.org/2.10/ja/gimp-filters-python-fu.html
こちらも参考まで。https://www.ibm.com/developerworks/jp/opensource/library/os-autogimp/index.html

[フィルター]に[Python-Fu]があれば利用できます。
ない場合はがんばっていれてください。（ごめんなさい。たぶんインストール時に何かするか。私は勝手に入っていました。）

（２）コードを書いてプラグインフォルダーに保存します。

```python:export_pdf2png.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#

from gimpfu import *
import os

def export_pdf2png(img, drw, path):
    img = img.duplicate()
    for layer in img.layers:
        layer.visible = False

    path = path.decode('shift-jis', "replace").encode() # 20220717追加:日本語ファイル名を文字化けしないようにする、カレントディレクトリのパスに日本語があった場合の対応
    for idx, layer in enumerate(img.layers):
        layer.visible = True
        
        filename = '{0}{1:0=3}.png'.format('PDF2PNG', idx) # 20220717変更:3桁の0付き数値に変更（ファイルソート用）
        fullpath = os.path.join(path, filename)

        layer_img = img.duplicate()
        layer_img.flatten()
        
        pdb.file_png_save(img, img.layers[idx], fullpath, filename, 0, 9, 0, 0, 0, 0, 0)

register(
    "python-fu-export-pdf2png",
    "Export PDF to PNG",
    "Exports pdf to png file",
    "J",
    "",
    "",
    "PDFからPNGに変換...",
    "*",
    [
        (PF_IMAGE, "img", "Input image", None),
        (PF_DRAWABLE, "drw", "Input drawable", None),
        (PF_DIRNAME, "path", "Output directory", os.getcwd())
    ],
    [],
    export_pdf2png,
    menu="<Image>/File/"
    )

main()
```

プラグインフォルダーは[編集]-[設定]-[フォルダー]-[プラグイン]に設定されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277081/1e71ddc4-b9e9-5c67-7b8d-f1453f2cde92.png)


（３）GIMPを再起動して[ファイル]メニューに登録されているのを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277081/1d2c0fda-f05a-26b9-14bf-47e328ffc58d.png)

手動の時の要領でpdfファイルをGIMPでインポートします。

[ファイル]メニューから[PDFからPNGに変換...]を選択して出力先フォルダーを指定して実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277081/b55c722d-43a5-c655-4db4-6672a3912772.png)

こんな感じでページ分出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277081/cf434756-a537-57b7-cabf-2ee83c81ca23.png)

出力された画像（１ページ目）です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277081/959892d2-16d4-612b-dddd-164fa9239460.png)

環境などで動作しない場合もあると思いますのでその場合はごめんなさい。
困っている方の参考になれば幸いです。

参考：ヘルプからプロシージャーブラウザーを起動するとプロシージャーの情報が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277081/5bd9ea51-f23b-1e7a-747a-5f1705583281.png)

##### 追記：
20220717一部修正
１．pngファイル出力用のディレクトリ指定でカレントディレクトリ（ダイアログボックスには(None)と表示される状態）までのパスに日本語があった場合文字化けしてしまう問題に対応。
path = path.decode('shift-jis', "replace").encode()
２．出力ファイルのソート用に3桁の0付き数値に変更
filename = '{0}{1:0=3}.png'.format('PDF2PNG', idx) 

##### おまけ：
20220717追加
出力したpngファイルを一覧できるようにmp4に変換するにはffmpegを利用する。
```
>  ffmpeg -r 1 -i PDF2PNG%03d.png -vcodec libx264 -pix_fmt yuv420p -r 3 -y -vf scale=5760:-1 out.mp4
```
https://video.wixstatic.com/video/9672ae_65bfbdfbf47542ec8775df228b591850/1080p/mp4/file.mp4