Python如何导出带PNG缩略图的pandas DataFrame为PDF文件
带图片的DataFrame导出PDF解决方案
你已经实现了将图片转base64内嵌到HTML表格中,只需使用HTML转PDF的工具即可直接导出,下面是两种可直接运行的实现方案:
方案1:pdfkit + wkhtmltopdf(兼容性更强,适合复杂表格)
安装依赖
- 安装系统依赖wkhtmltopdf:
- Windows:从官网下载安装包安装,安装后把bin目录加入系统PATH,或者后续代码里手动指定路径
- Mac:执行
brew install wkhtmltopdf - Linux:执行
sudo apt install wkhtmltopdf
- 安装Python包:执行
pip install pdfkit
实现代码
首先修正image_formatter的转义问题,避免HTML标签失效:
def image_formatter(im): # 直接输出原生img标签,指定固定宽度适配PDF排版 return f'<img src="data:image/png;base64,{image_base64(im)}" width="100">'
然后执行导出逻辑:
import pdfkit # 给HTML添加基础样式,优化PDF显示效果 html_template = f''' <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <style> table {{width: 100%; border-collapse: collapse; margin: 10px 0;}} th, td {{padding: 12px; text-align: left; border: 1px solid #eee;}} th {{background-color: #f5f5f5; font-weight: bold;}} img {{object-fit: contain;}} </style> </head> <body> {df.to_html(formatters={'file_path': image_formatter}, escape=False)} </body> </html> ''' # 导出PDF,如果wkhtmltopdf不在PATH中,取消下面两行注释手动指定路径 # config = pdfkit.configuration(wkhtmltopdf=r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe') # pdfkit.from_string(html_template, '导出结果.pdf', configuration=config) pdfkit.from_string(html_template, '导出结果.pdf')
方案2:WeasyPrint(配置更简单,无需额外配置系统路径)
安装依赖
执行 pip install weasyprint 即可完成所有依赖安装。
实现代码
复用上面的html_template变量,直接导出:
from weasyprint import HTML HTML(string=html_template).write_pdf('导出结果.pdf')
常见问题调整
- 如果PDF排版错乱:可以在
image_formatter中给img标签固定宽高,或者在样式表中调整表格列宽 - 图片不显示:检查
image_formatter返回的标签没有转义字符,且to_html参数escape=False已配置,base64的图片格式和后缀一致 - 中文显示乱码:在HTML的样式表中指定中文字体即可,比如添加
body {font-family: "SimSun", sans-serif;}
内容的提问来源于stack exchange,提问作者Subomi
相关产品推荐
相关产品推荐

