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

Python生成PDF保存到指定文件夹时触发TypeError的解决方法

错误原因

代码触发报错的核心问题有3个:

  • os.path.join()要求传入的路径段必须是字符串、字节或PathLike类型对象,你直接把PDF()生成的实例对象作为第二个参数传入,类型完全不匹配,这是抛出TypeError的直接原因。
  • 变量名重复覆盖:先将PDF生成实例赋值给pdf变量,后续with open(...) as pdf又把文件操作句柄赋值给同名变量,直接覆盖了原有的PDF实例,后续调用add_page()时实际指向的是文件句柄对象,根本不存在这个方法。
  • 逻辑误用:常规Python PDF生成库(比如fpdf、reportlab)都封装了文件写入逻辑,不需要手动调用open()创建文件,手动开文件反而会干扰库的正常写入流程。
正确实现代码

以最常用的fpdf2库为例,完整可运行逻辑如下:

import os
from fpdf import FPDF

# 创建目标文件夹,用os.makedirs加exist_ok=True比先判断exists更稳妥,避免并发场景下的判断冲突
os.makedirs("my_folder", exist_ok=True)

# 生成单个PDF存入目标文件夹
pdf = FPDF()
pdf.add_page()
pdf.set_font("Arial", size=12)
pdf.cell(200, 10, txt="测试PDF内容", ln=True, align="C")
# 拼接路径时第二个参数传入字符串类型的自定义文件名,调用库自带的output方法保存
pdf.output(os.path.join("my_folder", "sample_1.pdf"))

# 批量生成多个PDF存入目标文件夹
for file_idx in range(3):
    pdf = FPDF()
    pdf.add_page()
    pdf.set_font("Arial", size=12)
    pdf.cell(200, 10, txt=f"第{file_idx+1}份测试文档", ln=True, align="C")
    save_path = os.path.join("my_folder", f"document_{file_idx+1}.pdf")
    pdf.output(save_path)

如果你用的是其他PDF生成库,核心逻辑一致:拼接路径时必须传入字符串格式的文件名,不要把PDF实例对象传给路径拼接函数;不要用同名变量覆盖需要操作的核心对象;直接调用库提供的保存方法指定完整存储路径即可。

内容的提问来源于stack exchange,提问作者Olovia.solfjell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:18:06