Python发送邮件时如何调整pandas DataFrame表格字体大小
解决方案
表格字体显示偏小的核心原因是df.to_html()生成的默认表格标签未指定字体大小样式,会直接使用邮件客户端的默认小尺寸字体,同时你现有代码存在两处HTML结构错误,会干扰样式正常渲染:
<h1>标签错误放置在<body>标签外部- 包裹表格的
<p>标签被设置了width:50px;height:50px的固定极小尺寸,会严重压缩内部内容
先修正上述结构问题,再通过以下两种方式调整表格字体大小即可。
方案1:全局添加表格CSS样式(实现最简单)
直接在HTML的head部分添加针对表格的全局样式,给表格、表头、单元格统一设置字体大小,主流邮件客户端对这类基础CSS的支持度很高。
修正后的完整代码示例:
html = """\ <html> <head> <style> /* 表格整体字体大小可自行调整数值,数值越大字体越大 */ table {border-collapse: collapse; width: 100%; font-size: 16px;} th, td {border: 1px solid #dddddd; padding: 8px; text-align: left;} th {background-color: #f2f2f2;} </style> </head> <body> <h1 style="color:red;font-size:25px;">This is My Header</h1> {0} </body> </html> """.format(df3.to_html()) consumptions = MIMEText(html, 'html') msg.attach(consumptions)
方案2:用pandas Styler自定义样式(兼容性最好)
如果需要适配老旧邮件客户端(比如旧版Outlook,对全局style标签支持差),或者需要精细控制不同位置的字体大小,可以先用pandas的Styler接口给DataFrame设置内联样式,再渲染为HTML插入邮件,内联样式不会被任何邮件客户端过滤。
示例代码:
# 给DataFrame设置单元格样式,指定字体大小 styled_df = df3.style.set_properties(**{ 'font-size': '16pt', # 普通单元格字体大小 'border': '1px solid #ddd', 'padding': '8px' }).set_table_styles([ # 单独设置表头字体大小 {'selector': 'th', 'props': [('font-size', '18pt'), ('background-color', '#f2f2f2')]} ]).render() # 注:pandas 1.4.0及以上版本请把上面的.render()替换为.to_html() html = """\ <html> <head></head> <body> <h1 style="color:red;font-size:25px;">This is My Header</h1> {0} </body> </html> """.format(styled_df) consumptions = MIMEText(html, 'html') msg.attach(consumptions)
注意事项
- 邮件HTML不要引用外部CSS文件,所有样式尽量写在页面内部或者直接作为元素的style属性,否则大概率会被邮件客户端拦截过滤
- 字体大小单位推荐用
px或者pt,不要用em、rem这类相对单位,避免不同客户端显示尺寸差异过大
内容的提问来源于stack exchange,提问作者thentangler
相关产品推荐
相关产品推荐

