You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量为多份PDF添加文件名书签并完成合并?

批量合并PDF并添加文件名作为对应书签的实现方法

你不需要单独为每个PDF添加书签后再合并,直接在合并流程中就能完成书签添加,这样更高效且无需生成中间文件。以下是优化后的代码:

import os
from PyPDF2 import PdfFileMerger, PdfFileReader

# 设置存放PDF的文件夹路径
pdf_dir = r'C:\your_pdf_directory'  # 替换为你的PDF文件夹路径
output_path = './merged_result.pdf'

# 初始化合并器
merger = PdfFileMerger()
current_page = 0

# 遍历文件夹中的PDF文件(可按文件名排序保证顺序)
for filename in sorted(os.listdir(pdf_dir)):
    if filename.lower().endswith('.pdf'):
        pdf_path = os.path.join(pdf_dir, filename)
        # 获取不带后缀的文件名作为书签名称
        bookmark_name = os.path.splitext(filename)[0]
        
        # 读取PDF并添加到合并器
        reader = PdfFileReader(pdf_path)
        merger.append(reader)
        
        # 添加书签,指向当前PDF的第一页
        merger.addBookmark(bookmark_name, current_page)
        
        # 更新当前页码,用于下一个书签的定位
        current_page += reader.getNumPages()

# 保存合并后的PDF
with open(output_path, 'wb') as output_file:
    merger.write(output_file)

print(f"合并完成,结果已保存至 {output_path}")

关键说明:

  • 直接合并+书签:利用PdfFileMerger的append方法添加PDF,同时通过addBookmark在对应起始页码插入书签,省去单独处理每个PDF的步骤。
  • 页码跟踪:通过current_page变量记录每一份PDF的起始页码,确保书签定位准确。
  • 排序处理:用sorted()对文件名排序,保证合并顺序符合预期(可根据需求调整排序逻辑)。
  • 过滤PDF:通过endswith('.pdf')只处理PDF文件,避免文件夹中其他文件干扰。

替代方案(按你原思路:先批量加书签再合并)

如果你坚持先给每个PDF单独添加书签再合并,也可以遍历文件夹批量处理单个PDF:

import os
from PyPDF2 import PdfFileReader, PdfFileWriter

pdf_dir = r'C:\your_pdf_directory'
processed_dir = './processed_pdfs'

# 创建处理后的PDF存放文件夹
os.makedirs(processed_dir, exist_ok=True)

for filename in os.listdir(pdf_dir):
    if filename.lower().endswith('.pdf'):
        pdf_path = os.path.join(pdf_dir, filename)
        bookmark_name = os.path.splitext(filename)[0]
        
        reader = PdfFileReader(pdf_path)
        writer = PdfFileWriter()
        
        # 添加所有页面
        for page_num in range(reader.getNumPages()):
            writer.addPage(reader.getPage(page_num))
        
        # 添加书签
        writer.addBookmark(bookmark_name, 0)
        
        # 保存处理后的PDF
        output_path = os.path.join(processed_dir, f"processed_{filename}")
        with open(output_path, 'wb') as output_file:
            writer.write(output_file)

print("所有PDF已添加书签,存放在processed_pdfs文件夹中")

# 后续合并processed_dir中的PDF即可(你已实现合并功能,此处省略)

内容的提问来源于stack exchange,提问作者user20242302

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 20:21:10