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

Azure App Service Python站点Flask+fPDF返回PDF报错,求调试修复

调试Azure Flask站点PDF路由500错误指南

一、开启Azure App Service的HTTP详细日志

  • 登录Azure门户,找到你的App Service实例
  • 左侧菜单点「监控」>「日志」
  • 切换到「配置」标签,开启「HTTP日志记录(文件系统)」,设置日志保留期后保存
  • 重启App Service,日志会存在D:\home\LogFiles\http\RawLogs路径,或者直接在「日志流」里查看带错误栈的详细请求日志

二、本地复现调试(最快定位问题)

  • 把代码拉到本地,建虚拟环境装依赖:pip install -r requirements.txt
  • 启动Flask:flask run
  • 访问本地的/pdf/和/jpg_to_pdf/<name>路由,控制台会直接输出错误栈,比Azure日志更直观
  • 重点检查这几点:
    • fPDF实例化是否正确,尤其是字体文件路径(Azure默认环境可能缺字体)
    • 图片转PDF时,图片读取路径是否正确(别用相对路径,用app.root_path拼接绝对路径)
    • 返回PDF的响应头有没有设置对,比如:
      return response, 200, {
          'Content-Type': 'application/pdf',
          'Content-Disposition': 'inline; filename="output.pdf"'
      }
      

三、Azure环境下fPDF常见坑点排查

  • 字体缺失:fPDF默认字体在Azure的Windows/Linux环境里可能没有。解决办法:
    • 把需要的字体文件(比如arial.ttf)放到项目的fonts文件夹
    • 初始化fPDF时指定字体路径:
      from fpdf import FPDF
      pdf = FPDF()
      pdf.add_font('Arial', '', './fonts/arial.ttf', uni=True)
      pdf.set_font('Arial', size=12)
      
  • 文件权限:如果生成PDF要临时写文件,用Azure的临时目录:os.environ.get('TEMP', '/tmp'),别往根目录写,会有权限错误
  • 图片路径错误:处理/jpg_to_pdf/<name>时,确保图片存在,用绝对路径拼接:
    import os
    from flask import current_app
    
    img_path = os.path.join(current_app.root_path, 'static', 'images', f"{name}.jpg")
    if not os.path.exists(img_path):
        return "Image not found", 404
    

四、Azure实时查看错误栈

  • 在「日志流」里,除了依赖安装日志,还能看到应用运行时的异常信息,开启详细日志后会显示具体的错误类型(比如FileNotFoundError、FontNotFoundError)
  • 也可以在App Service左侧菜单点「诊断并解决问题」,搜「应用程序错误」,里面有结构化的错误报告

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:33:37