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

如何将Plotly离线结果导出为图片/PDF而非HTML?含HTML转换方案

Plotly离线导出图片/PDF,及HTML转其他格式的方案

嘿,这个问题我刚好折腾过!下面分两种情况给你讲清楚:

一、直接用Plotly导出图片或PDF

Plotly本身就支持直接导出图片、PDF等格式,不需要先生成HTML,不过得装个额外的依赖工具:

1. 官方推荐:write_image方法

首先安装kaleido——这是Plotly官方推出的导出工具,支持PNG、JPEG、PDF等多种格式:

pip install kaleido

然后修改你的代码,直接用write_image替代原来的plot方法就行:

# 假设你已经生成了fig对象
# 导出PNG
fig.write_image("output.png")
# 导出JPEG
fig.write_image("output.jpeg")
# 导出PDF
fig.write_image("output.pdf")

如果是比较老的Plotly版本,可能需要用plotly.io.write_image(fig, "output.png"),新版本直接调用fig.write_image就可以啦。

2. 获取二进制图片数据:to_image方法

如果不想直接保存到文件,而是要拿到图片的二进制内容(比如在Web服务里返回给前端),可以用这个方法:

# 获取PNG格式的二进制数据
img_bytes = fig.to_image(format="png")
# 写入文件
with open("output.png", "wb") as f:
    f.write(img_bytes)

二、如果没法直接导出,把HTML转成PPT/PDF/图片

要是因为环境限制装不了kaleido,先按你的原有代码生成HTML,再用下面的方法转换:

1. HTML转图片/PDF

方案A:用Selenium + ChromeDriver模拟浏览器截图

这个方法能完美还原Plotly图表的交互样式,步骤如下:

  • 先装依赖:pip install selenium
  • 下载和你的Chrome版本匹配的ChromeDriver,放到系统PATH里或者代码指定路径

代码示例:

import os
from selenium import webdriver
import time
import plotly.offline as pyo

# 先生成HTML
filename = "test.html"
pyo.plot(fig, filename=filename, show_link=False, auto_open=False)

# 启动Chrome打开HTML并截图
driver = webdriver.Chrome()
# 注意要转成绝对路径的file协议URL
driver.get(f"file://{os.path.abspath(filename)}")
time.sleep(2)  # 留时间让图表加载完成
driver.save_screenshot("output.png")  # 保存为PNG

# 转PDF的话,可以用Chrome的打印功能
driver.execute_script('window.print();')
# 部分Chrome版本支持直接保存PDF:driver.save_as_pdf("output.pdf")
driver.quit()

方案B:用wkhtmltopdf直接转换

这是一个开源的HTML转PDF/图片工具,步骤:

  • 从官网下载对应系统的wkhtmltopdf并安装
  • 装Python库:pip install pdfkit

代码示例:

import pdfkit

# HTML转PDF
pdfkit.from_file("test.html", "output.pdf")

# HTML转PNG图片
pdfkit.from_file("test.html", "output.png", options={"format": "png"})

2. HTML转PPT

没有直接把HTML转PPT的工具,最靠谱的方式是先转成图片,再插入PPT:

  • 先按上面的方法把HTML转成PNG图片
  • 用python-pptx库生成PPT并插入图片:
from pptx import Presentation
from pptx.util import Inches

# 创建PPT对象
prs = Presentation()
# 选一个空白幻灯片布局
slide_layout = prs.slide_layouts[5]
slide = prs.slides.add_slide(slide_layout)

# 插入图片,调整位置和大小
left = top = Inches(1)
pic = slide.shapes.add_picture("output.png", left, top, width=Inches(8))

# 保存PPT
prs.save("output.pptx")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:37:52