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

Streamlit PDF报告应用字体路径异常问题求助

Streamlit PDF生成应用字体路径不生效问题排查与解决

我开发的Streamlit PDF报告生成应用在本地运行正常,但发给同事后无法工作。已经将脚本中的字体路径从my_path/font.tff修改为同事电脑上的her_path/font.tff,但应用仍试图查找原路径。报错出现在下载按钮处,不过按钮代码本身并未涉及字体路径,代码如下:

st.download_button(
        'Download Report',
        data=pdf.output(dest='S').encode('latin-1'),
        file_name=f'fint_test_{nombre.title()}_{user}.pdf'
        )
    
    return

可能的原因

  • 缓存残留:Streamlit或PDF生成库(如FPDF、ReportLab)可能缓存了初始的字体加载信息,修改路径后未触发重新加载
  • 字体加载逻辑触发时机不对:字体加载代码如果写在模块初始化阶段,只会执行一次,后续修改路径不会生效
  • 硬编码路径遗漏:代码其他地方或配置文件中可能还存在原路径的引用,没完全替换

解决方法

  • 清除Streamlit缓存:让同事在启动应用前执行命令:streamlit cache clear,或者在应用代码开头添加st.cache_data.clear()(如果使用了缓存装饰器),确保旧的字体路径缓存被清空
  • 改用动态路径/用户选择:避免硬编码路径,让同事通过文件选择器指定字体文件,示例代码:
    font_file = st.file_uploader("选择字体文件", type=["ttf"])
    if font_file:
        # 临时保存字体到本地临时文件
        temp_font_path = "temp_custom_font.ttf"
        with open(temp_font_path, "wb") as f:
            f.write(font_file.getbuffer())
        # 使用临时路径加载字体
        pdf.add_font("CustomFont", "", temp_font_path, uni=True)
    
  • 检查字体加载位置:确保字体加载的代码在每次生成PDF前都重新执行,比如放在生成PDF的函数内部,而不是模块级别的全局代码里
  • 全局搜索路径引用:在整个代码库(包括配置文件、.env等)中搜索my_path/font.tff,确认所有引用都已替换为新路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:15:28