Kritaで漫画描いた複数ページをPythonスクリプトでpng及びpdf出力

### やりたいこと。
[krita](https://krita.org/ja/)ファイル名　[ヘッドネーム]数字連番.kra で保存されたファイルをoutフォルダにpngとpdfを作成すること。

・手順
　kraファイルからpngファイル出力
　pngファイルから結合してpdf化 

# kraファイルからpngファイル出力

### ソースのカスタマイズ３か所
以下のkritaの作業場所フォルダと、出力先フォルダおよび、ヘッダー名を変更して下さい。
folder_path = "G:\\work\\漫画\\45_202409_y"  # kritaの作成フォルダ
output_folder = "G:\\work\\漫画\\45_202409_y\\out" # png出力フォルダ
pagehead = "page_" #  ヘッドネーム　page_00100.kra　であれば page_としてください

```python auto_page_to_output_png.py
import os
import re
from krita import *

# Kritaアプリケーションを取得
application = Krita.instance()

# 変換対象のフォルダを指定（Windows用にパスを修正）
folder_path = "G:\\work\\漫画\\45_202409_y"  # kritaの作成フォルダ
output_folder = "G:\\work\\漫画\\45_202409_y\\out" # png出力フォルダ

# ヘッドネーム　neko_00100.kra　であれば neko_としてください
pagehead = "page_"

# 出力フォルダが存在しない場合は作成
if not os.path.exists(output_folder):
    os.makedirs(output_folder)

# .kraファイル名のパターンにマッチする正規表現
kra_pattern = re.compile(rf"{pagehead}(\d+)\.kra")

# 指定フォルダ内の .kra ファイルを取得し、番号でソート
kra_files = []
for file_name in os.listdir(folder_path):
    match = kra_pattern.match(file_name)
    if match:
        page_number = int(match.group(1))  # pageの番号を取得
        kra_files.append((page_number, os.path.join(folder_path, file_name)))

# ページ番号でソート
kra_files.sort(key=lambda x: x[0])

# 各ファイルを開いてPNGとしてエクスポート
for page_number, kra_file_path in kra_files:
    # .kra ファイルを開く
    doc = application.openDocument(kra_file_path)
    if doc:
        # 出力するPNGファイルのパス
        output_file_path = os.path.join(output_folder, f"{pagehead}{page_number}.png")

        # エクスポート処理
        doc.exportImage(output_file_path, InfoObject())
        print(f"Exported: {output_file_path}")

        # ドキュメントを閉じる
        doc.close()
    else:
        print(f"Failed to open: {kra_file_path}")


```

### ファイル名
ここではpythonで実行するために、krita作成のファイル名を　[ヘッドネーム]数字.kra　で保存してください。
例えば[ヘッドネーム]がpage_のとき
page_00100.kra
page_00200.kra

例えば[ヘッドネーム]がneko_のとき
neko_10.kra
neko_20.kra



## 実行方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547467/f3743ddb-4831-02da-1ef3-62d72f01c447.png)

ツール＞スクリプト＞スクリプター＞コードを張り付けて　実行　▽マーク
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547467/183cbc19-0b40-0601-49e5-245a30db665d.png)

pngファイルが作成される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547467/0ff3403e-493a-92a0-e301-5ab8cf166015.png)


# pngファイルから結合してpdf化

python３をインストールしてなければ、インストールして下さい。
kritaで動かそうとしましたが上手くいかなかったので。

pdf化するライブラリ等、適時スクリプト実行にエラーが発生しましたらインストールして下さい。
```
pip install Pillow
```
以下はライブラリのインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547467/fb11f0fd-c355-e14c-7d56-81234740f8c7.png)



以下のスクリプトがoutフォルダ配下のpngを連結するスクリプト
### ソースのカスタマイズ箇所２か所
以下のpng出力先フォルダと、pdf出力先を変更してください。
output_folder = r"G:\work\漫画\45_202409_y\out"  #  png出力フォルダ
output_pdf = r"G:\work\漫画\45_202409_y\out\put.pdf"  #  pdf出力先

```python auto_page_to_output_pdf.py
 from PIL import Image
import os

# 変換対象のフォルダを指定（Windows用にパスを修正）
output_folder = r"G:\work\漫画\45_202409_y\out"  #  png出力フォルダ
output_pdf = r"G:\work\漫画\45_202409_y\out\put.pdf"  #  pdf出力先

# PNGファイルを取得してソート
png_files = sorted([os.path.join(output_folder, f) for f in os.listdir(output_folder) if f.endswith('.png')])

if png_files:
    images = [Image.open(png).convert('RGB') for png in png_files]
    
    # 最初の画像を基にしてPDFを生成し、残りの画像を追加
    images[0].save(output_pdf, save_all=True, append_images=images[1:])
    print(f"PDF successfully saved as: {output_pdf}")
else:
    print("No PNG files found for conversion.")


```

以上をDOSコマンドで実行
Windowsキー＋R　でファイル名を指定して実行を表示させて、cmdを入力してOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547467/68ce5e4b-dea4-66be-bd92-6210ee92c9e1.png)

コマンドプロンプトが起動されるので、先ほどのauto_page_to_output_pdf.py　を実行する。
```
G:\work\漫画\45_202409_y>py auto_page_to_output_pdf.py
PDF successfully saved as: G:\work\漫画\45_202409_y\out\put.pdf
```

すると、out.pdfが出力される。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547467/449c04ec-0320-94e4-6e51-613a14184b38.png)

以上。