PDFファイルを編集ソフトなしで結合
PDFを操作するライブラリーPyPDF2をコマンドラインよりインストールしておきます。
PDFファイルを結合
pip install pypdf2
結合用の作業ファイルを作成し、「pdf_files」というフォルダの中に結合させたいPDFファイルを入れておく
from heapq import merge
from pathlib import Path
import PyPDF2
# フォルダのPDFファイル一覧
pdf_dir = Path("./pdf_files")
pdf_files = sorted(pdf_dir.glob("*.pdf"))
# 1つのPDFファイルへ
pdf_join = PyPDF2.PdfFileWriter()
for pdf_file in pdf_files:
pdf_reader = PyPDF2.PdfFileReader(str(pdf_file))
for i in range(pdf_reader.getNumPages()):
pdf_join.addPage(pdf_reader.getPage(i))
# 保存ファイル名
merged_file = pdf_files[0].stem + "-" + pdf_files[-1].stem + ".pdf"
# 保存
with open(merged_file, "wb")as f:
pdf_join.write(f)
画像ファイルをPDFファイルに結合
pip install img2pdf
「image_files」というフォルダの中に結合させたい画像ファイルを入れておく
import os
import img2pdf
from traceback import print_exc
def convert_dir(dir_path):
if os.path.isdir(dir_path):
pdf_file_path = "{}.pdf".format(os.path.basename(dir_path))
pdf_file_path = os.path.join(os.path.dirname(dir_path), pdf_file_path)
else:
raise Exception("invalid path")
images_ = []
print("scanning directory: {}".format(dir_path))
for item in os.listdir(dir_path):
path_ = os.path.join(dir_path, item)
if os.path.isfile(path_):
ext_ = os.path.splitext(path_)[-1].lower()
if ext_ in [".jpg", ".jpeg", ".png"]:
images_.append(path_)
else:
continue
else:
continue
if len(images_) == 0:
raise Exception("no images files")
else:
images_.sort()
print("generating pdf file:{} ...".format(pdf_file_path))
with open(pdf_file_path, 'wb')as f:
f.write(img2pdf.convert(images_))
if __name__ == "__main__":
try:
dir_path = "./image_files"
convert_dir(dir_path)
except BaseException:
print_exc()
画像データのサイズなどそのまま出力させていますが、明示的に指定することもできます。ただし、様々なファイルサイズによってエラーが多発したため、明示的に指定していません
例外処理
try:
# 例外が発生しそうな処理
except:
# 例外が起きたとき
finally:
# 例外の有無に関わらず必ず実行する処理
try:
# 例外が発生しそうな処理
except:
# 例外が起きたとき
finally:
# 例外の有無に関わらず必ず実行する処理