Plotly导出PDF时字体样式改变,如何保留自定义设置的字体?
Plotly导出PDF时丢失指定字体的解决方案
问题描述
使用Plotly创建可视化图表时,Jupyter Notebook内的字体显示符合预期,但导出为PDF文件后设定的字体样式丢失,自动切换为系统默认字体。
示例代码:
import plotly.graph_objects as go import plotly.io as pio fig = go.Figure() fig.update_layout( title="As you can see the font changes, how can I keep the font?", font_family = "Latin Modern Roman" ) fig.show() pio.write_image(fig, "test.pdf")
Jupyter内显示效果:

导出PDF后的效果:
原因
Plotly 导出静态PDF依赖的Kaleido(新版默认)/Orca(旧版默认)引擎默认不会嵌入自定义字体,会自动 fallback 到系统默认字体,导致和浏览器端渲染效果不一致。
解决步骤
- 确认指定字体已全局安装,且填写的字体名称和系统识别的正式名称完全一致:
- Windows:控制面板→字体中查看字体正式名称
- macOS:字体册中查看字体正式名称
- Linux:执行
fc-list命令查看已安装字体列表
- 修改导出代码,开启字体嵌入配置:
import plotly.graph_objects as go import plotly.io as pio fig = go.Figure() fig.update_layout( title="As you can see the font changes, how can I keep the font?", font_family = "Latin Modern Roman" ) fig.show() pio.write_image( fig, "test.pdf", engine="kaleido", # 旧版使用Orca的话替换为"orca" embed_fonts=True # 核心参数:开启字体嵌入 ) - 备选方案:如果上述配置不生效,可以先导出为SVG格式,再用Inkscape、Adobe Illustrator等矢量工具打开后导出为PDF,这类工具会自动识别并嵌入用到的字体,效果和Jupyter内完全一致:
pio.write_image(fig, "test.svg", engine="kaleido")
内容的提问来源于stack exchange,提问作者thyhmoo
相关产品推荐
相关产品推荐

