使用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
相关产品推荐
相关产品推荐

