いつものようにChatGPTさんに教えてもらった。
カレントディレクトリ内のPDFを結合
import os
from PyPDF2 import PdfReader, PdfWriter
from natsort import natsorted
# カレントディレクトリ内のPDFファイルをすべて取得
pdf_files = [f for f in os.listdir('.') if f.lower().endswith('.pdf')]
# PDFファイルを自然順ソート
pdf_files = natsorted(pdf_files)
# PdfWriterオブジェクトを作成
pdf_writer = PdfWriter()
# 現在のページ数を保持する変数
current_page = 0
# PDFファイルを結合し、それぞれにブックマークを追加
for pdf_file in pdf_files:
pdf_reader = PdfReader(pdf_file)
num_pages = len(pdf_reader.pages)
# PDFのページを追加
for page_num in range(num_pages):
pdf_writer.add_page(pdf_reader.pages[page_num])
# ファイル名から拡張子を削除
bookmark_title = os.path.splitext(pdf_file)[0]
# ブックマークを追加(ブックマーク名はファイル名から拡張子を除いたもの)
pdf_writer.add_outline_item(title=bookmark_title, page_number=current_page)
# 現在のページ数を更新
current_page += num_pages
# 出力ファイルの名前
output_filename = "merged_output.pdf"
# 結合したPDFを書き出す
with open(output_filename, 'wb') as output_pdf:
pdf_writer.write(output_pdf)
print(f"結合されたPDFが '{output_filename}' として保存されました。")
カレントディレクトリの一つ下のディレクトリ内のPDFファイルを結合させる場合
import os
from PyPDF2 import PdfReader, PdfWriter
from natsort import natsorted
# カレントディレクトリの一つ下のディレクトリ名
subdirectory = 'your_subdirectory' # サブディレクトリの名前を指定してください
# サブディレクトリ内のPDFファイルをすべて取得
pdf_files = [f for f in os.listdir(subdirectory) if f.lower().endswith('.pdf')]
# PDFファイルを自然順ソート
pdf_files = natsorted(pdf_files)
# PdfWriterオブジェクトを作成
pdf_writer = PdfWriter()
# 現在のページ数を保持する変数
current_page = 0
# PDFファイルを結合し、それぞれにブックマークを追加
for pdf_file in pdf_files:
pdf_path = os.path.join(subdirectory, pdf_file)
pdf_reader = PdfReader(pdf_path)
num_pages = len(pdf_reader.pages)
# PDFのページを追加
for page_num in range(num_pages):
pdf_writer.add_page(pdf_reader.pages[page_num])
# ファイル名から拡張子を削除
bookmark_title = os.path.splitext(pdf_file)[0]
# ブックマークを追加(ブックマーク名はファイル名から拡張子を除いたもの)
pdf_writer.add_outline_item(title=bookmark_title, page_number=current_page)
# 現在のページ数を更新
current_page += num_pages
# 出力ファイルの名前
output_filename = "merged_output.pdf"
# 結合したPDFを書き出す
with open(output_filename, 'wb') as output_pdf:
pdf_writer.write(output_pdf)
print(f"結合されたPDFが '{output_filename}' として保存されました。")