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

使用PyPDF2合并PDF时出现页面重复与缺失问题求助

PyPDF2合并PDF出现重复/缺失页面的问题修复

问题根源

你代码里的pdfFileObj.close()被错误地放在了遍历单个PDF页面的循环内部——每读取一页就立刻关闭PDF文件,导致后续页面根本无法正常读取,只能反复添加该PDF的第一页,同时跳过了其余页面。这就是为什么总页数看似正确,但内容出现重复和缺失的原因。

修复后的代码

把关闭文件的语句移到页面遍历循环的外面,确保整个PDF的所有页面都读取完成后再关闭:

pdfFiles = []
for filename in os.listdir(self.source):
    if filename.endswith('.pdf'):
        pdfFiles.append(os.path.join(self.source,filename))

pdfFiles.sort(key = str.lower)

pdfWriter = PyPDF2.PdfWriter()
for filename in pdfFiles:
    pdfFileObj = open(filename,'rb')
    pdfReader = PyPDF2.PdfReader(pdfFileObj)
    for pageNum in range(len(pdfReader.pages)):
        pageObj = pdfReader.pages[pageNum]
        pdfWriter.add_page(pageObj)
    # 移到这里:所有页面读取完成后再关闭文件
    pdfFileObj.close()

fileout = CombineName
pdfOutput = open(self.destination + fileout,'wb')
pdfWriter.write(pdfOutput)
pdfOutput.close()

更稳妥的写法(推荐)

用Python的with语句自动管理文件上下文,无需手动调用close(),从根源避免这类失误:

pdfFiles = []
for filename in os.listdir(self.source):
    if filename.endswith('.pdf'):
        pdfFiles.append(os.path.join(self.source,filename))

pdfFiles.sort(key = str.lower)

pdfWriter = PyPDF2.PdfWriter()
for filename in pdfFiles:
    # with语句会在代码块结束后自动关闭文件
    with open(filename,'rb') as pdfFileObj:
        pdfReader = PyPDF2.PdfReader(pdfFileObj)
        for pageNum in range(len(pdfReader.pages)):
            pageObj = pdfReader.pages[pageNum]
            pdfWriter.add_page(pageObj)

fileout = CombineName
with open(self.destination + fileout,'wb') as pdfOutput:
    pdfWriter.write(pdfOutput)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:25:06