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

使用ReportLab生成PDF时加载本地图片报OSError无法打开资源是什么原因?

问题原因与解决方案

核心报错原因

报错是因为car.png的相对路径匹配失败。ReportLab的Image类加载本地图片时,相对路径是相对于你执行代码时的当前工作目录,不是generate.py文件的存放目录,当工作目录和main文件夹不一致时,就会找不到图片资源。

代码存在的问题

  • 路径计算错误:你计算base_dir时多调用了一次os.path.dirname,拿到的是main文件夹的上级目录,不是main文件夹本身的路径
  • 图片路径未使用绝对路径:已经拿到了项目目录的路径,但加载图片时直接写了相对路径car.png,没有拼接成正确的绝对路径
  • 额外参数错误:SimpleDocTemplate需要传入PDF输出的完整文件路径,你之前直接传了文件夹路径base_dir,也不符合参数要求

修正后的代码

def generatePDF():
    # 拿到generate.py所在的main文件夹的绝对路径
    base_dir = os.path.dirname(os.path.abspath(__file__))
    # 拼接得到car.png的绝对路径
    car_img_path = os.path.join(base_dir, 'car.png')
    # 指定最终输出的PDF文件路径,示例为存到main目录下的output.pdf
    doc = SimpleDocTemplate(os.path.join(base_dir, 'output.pdf'))
    story = []
    # ... 添加文本段落逻辑
    car = [['Renault', Image(car_img_path), 'Description']]
    table = Table(car, colWidths=100, rowHeights=50)
    story.append(table)
    doc.build(story)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:42:01