前提・実現したいこと
画像ファイルをPDFに変換する処理をPythonで行い、そのプログラムをexe化したいと考えています。
モジュールはPyInstallerを採用しています。(py2exeではうまくいかなかったため)
発生している問題・エラーメッセージ
- 通常のPython環境でコードを実行する際にはエラーにならずにPDFが出力される
(各画像のPDFと、結合された test.pdf が出力される)
- PyInstallerで生成したexeファイルから実行すると途中でクラッシュする
→ こちらのサイトを参考に--debug all
の引数で生成したexeファイルで実行してみていますがログの出力中にコンソールが落ちます
exe ファイルでは、以下のimg2pdf.convert
行の直前まで実行されていることを確認しています。
そのため、img2pdfモジュールがインポートされていない、という可能性も少ないと考えています。
Python
1layout_pdf = img2pdf.get_layout_fun((img2pdf.mm_to_pt(210), img2pdf.mm_to_pt(297))) 2# ここまでは実行されている 3cov_pdf = img2pdf.convert(i,layout_fun=layout_pdf)
pyファイルの実行ではエラーなく実行されるため、exe化に問題があると思いますが、理由が思い当たらず、知恵をお借りできればと思った次第です。
該当のソースコード
こちらのサイトのコードを拝借しています。
Python
1 2#!python3.7 3 4import os 5from PIL import Image 6import img2pdf 7import PyPDF2 8 9path = r"C:\Users\USERNAME\Desktop\img2PDF\im" 10pdf_path = r"C:\Users\USERNAME\Desktop\img2PDF\pdf" 11os.chdir(path) 12 13#画像を読み込み、pdfファイルに変換 14n = 0 15for i in os.listdir(path): 16 #pdfファイル(各ページ)の保存名を指定 17 pdf_name = pdf_path + "\" + str(n) + ".pdf" 18 19 #Pillowモジュールを使用し画像の読み込み 20 img = Image.open(i) 21 22 #画像→pdfファイルに変換 23 layout_pdf = img2pdf.get_layout_fun((img2pdf.mm_to_pt(210), img2pdf.mm_to_pt(297))) 24 cov_pdf = img2pdf.convert(i,layout_fun=layout_pdf) 25 26 #pdfファイルを読み込み(pdf_nameで指定したpdfがない場合、pdf_nameをファイル名として新規にpdfファイルを作成) 27 file = open(pdf_name, "wb") 28 #pdfファイルを書き込み 29 file.write(cov_pdf) 30 n += 1 31 #開いているファイルを閉じる 32 img.close() 33 file.close() 34 35#複数のpdfファイルを結合する 36merge = PyPDF2.PdfFileMerger() 37for j in os.listdir(pdf_path): 38 merge.append(pdf_path + "\" + j) 39 40merge.write(pdf_path + "\" + "test.pdf") 41merge.close() 42 43print("変換終了") 44
補足情報(FW/ツールのバージョンなど)
Windows 10
Python 3.7
VS code
回答2件
あなたの回答
tips
プレビュー