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)
说明
- 先安装依赖:
pip install reportlab - 修复了所有缩进问题,确保函数定义和代码块作用域正确
- 用ReportLab的
canvas类实现文本添加和分页逻辑 - 使用原始字符串
r''处理路径,避免转义问题
内容的提问来源于stack exchange,提问作者LCarvalho
相关产品推荐
相关产品推荐

