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

PyPDF2合并PDF时报Unresolved named destination '_PAGE1'错如何解决

报错原因

该错误是由于待合并的部分PDF文件存在格式不规范的命名目标(即PDF内部跳转书签),旧版PyPDF2处理这类异常书签时没有容错逻辑,因此会抛出对应报错。


方案1:快速修复(无需换库,适合不需要保留原PDF书签的场景)

在merger.append方法中添加import_bookmarks=False参数,禁止导入原PDF的书签,跳过书签解析逻辑即可规避报错。同时对原有代码的遍历逻辑、资源泄漏问题做了优化:

dir_name = r"E:\Data"
import os
from PyPDF2 import PdfFileMerger, PdfFileReader

# 直接遍历根目录下的一级子文件夹,避免原有os.walk逻辑重复遍历的问题
for entry in os.scandir(dir_name):
    if entry.is_dir():
        sub_dir = entry.path
        merger = PdfFileMerger()
        for filename in os.listdir(sub_dir):
            if filename.endswith(".pdf"):
                filepath = os.path.join(sub_dir, filename)
                # 加import_bookmarks=False参数禁止导入书签
                with open(filepath, 'rb') as f:
                    merger.append(PdfFileReader(f), import_bookmarks=False)
        output_path = os.path.join(dir_name, f"{entry.name}.pdf")
        merger.write(output_path)
        merger.close()

方案2:需要保留原PDF书签的场景

如果需要保留原PDF的书签,建议换用兼容性更强的PyMuPDF(库名fitz)处理PDF合并,该库对格式不规范的PDF容错性远高于PyPDF2。

  1. 先安装依赖:pip install pymupdf
  2. 合并代码示例:
import os
import fitz

dir_name = r"E:\Data"

for entry in os.scandir(dir_name):
    if entry.is_dir():
        sub_dir = entry.path
        merger = fitz.open()
        # sorted保证PDF按文件名顺序合并
        for filename in sorted(os.listdir(sub_dir)):
            if filename.lower().endswith(".pdf"):
                filepath = os.path.join(sub_dir, filename)
                with fitz.open(filepath) as src_pdf:
                    merger.insert_pdf(src_pdf)
        output_path = os.path.join(dir_name, f"{entry.name}.pdf")
        merger.save(output_path)
        merger.close()

额外说明

若仍想使用PyPDF2生态,可卸载旧版安装维护更活跃的新版pypdf:pip uninstall PyPDF2 && pip install pypdf,导入逻辑兼容旧版PyPDF2,自带的容错逻辑也能解决大部分这类报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:18:03