概要
PDF結合しようとしてPythonでさくっとスクリプト書こうとした。
Pythonならすぐ出るだろうとChatGPTに書かせてみたら地味につまづいてしまったのでメモ。
環境
Windows 11
Python 3.11.5
PyPDF2 3.0.1
VSCode 1.68.0
やりたかった処理
指定したフォルダ(folder_path)の中にあるPDFファイルをすべて結合。
出力先PDF(output_pdf)はカレントディレクトリに作成される。
詰まったところ
PdfFileMerger
クラスが間違ってるって言われる。
対策
PdfFile◯◯◯
クラスはPdf◯◯◯
というクラスに置き換える。
【Python】PDFをいじる によれば、PyPDF2ライブラリはVer3.0.0から仕様が変わったようだ。
PyPDF2の公式Documentでもそうなっていて、PdfFile◯◯◯
クラスを呼ぶと「Pdf◯◯◯
の間違いだろ?」というエラーメッセージを出すようになってる。
The PdfMerger Class — PyPDF2 documentation
ソースコード
# 標準だとUTF-8指定で書けって言われたけど面倒なのでShift-JIS指定した
# -*- coding: Shift-jis -*-
import os
from PyPDF2 import PdfMerger
# 結合するPDFファイルが格納されているフォルダを指定
# '/path/to/your/folder'にフォルダパスを指定する。
folder_path = '/path/to/your/folder'
# 結合後のPDFファイル名を指定
output_pdf = 'combined.pdf'
# PdfMergerオブジェクトを作成
pdf_merger = PdfMerger()
# フォルダ内のPDFファイルを取得
pdf_files = [f for f in os.listdir(folder_path) if f.endswith('.pdf')]
# ファイルが見つからない場合、エラーメッセージを表示
if not pdf_files:
print("フォルダ内にPDFファイルが見つかりませんでした。")
else:
# PDFファイルを順番に結合
for pdf_file in pdf_files:
pdf_path = os.path.join(folder_path, pdf_file)
pdf_merger.append(pdf_path)
# 結合したPDFファイルを保存
with open(output_pdf, 'wb') as output:
pdf_merger.write(output)
pdf_merger.close()
print(f"{len(pdf_files)} 個のPDFファイルを {output_pdf} に結合しました。")