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

PyPDF2生成文件夹文件路径PDF失败 代码故障排查求助

问题排查与修复方案

代码中的核心问题

  • 缩进错误:
    criar_pdf_caminhos函数定义前有多余缩进,导致它成为listar_arquivos_diretorio的嵌套函数,外部调用时会触发NameError;同时with open代码块缩进错误,不在函数内部,无法访问函数内的pdf对象。

  • PyPDF2功能误用:
    PdfWriter类没有add_text方法,它的核心作用是合并、拆分PDF,无法直接添加文本内容,这是PDF创建失败的关键原因。

  • 路径转义问题:
    字符串路径中的\会被Python解析为转义字符,'D:\Leandro'中的\L虽不会触发语法错误,但为避免潜在的路径解析异常,应使用原始字符串或双反斜杠。

修复后的代码(改用ReportLab生成文本PDF)

因为PyPDF2不支持直接添加文本,这里改用专门用于生成PDF的ReportLab库:

import os
from reportlab.pdfgen import canvas

def listar_arquivos_diretorio(diretorio):
    arquivos = []
    for root, _, files in os.walk(diretorio):
        for file in files:
            caminho = os.path.join(root, file)
            arquivos.append(caminho)
    return arquivos

def criar_pdf_caminhos(arquivos, nome_arquivo):
    # 创建PDF画布
    c = canvas.Canvas(nome_arquivo)
    y_position = 750  # 初始Y坐标(从页面顶部开始)
    page_height = 800
    margin = 50

    for caminho in arquivos:
        # 检查是否需要分页
        if y_position < margin:
            c.showPage()
            y_position = page_height - margin
        
        # 添加文本
        c.drawString(50, y_position, caminho)
        y_position -= 20  # 每行间距
    
    # 保存PDF
    c.save()

# 使用原始字符串避免路径转义问题
diretorio = r'D:\Leandro'
arquivos = listar_arquivos_diretorio(diretorio)
nome_arquivo_pdf = r'D:\Leandro\a.pdf'

criar_pdf_caminhos(arquivos, nome_arquivo_pdf)

说明

  1. 先安装依赖:pip install reportlab
  2. 修复了所有缩进问题,确保函数定义和代码块作用域正确
  3. 用ReportLab的canvas类实现文本添加和分页逻辑
  4. 使用原始字符串r''处理路径,避免转义问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:17:16