adbird(広告鳥) 備忘録

複数のPDFを結合して、各ファイル名をブックマーク(しおり)として付す方法

いつものように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}' として保存されました。")