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

如何使用Python获取dataframe的可读可打印文本副本

DataFrame一键打印最优解决方案

以下两种方案均无需用户手动打开Excel、PDF等第三方文件,点击应用内按钮即可完成打印流程,对电脑操作不熟练的人群友好:

方案1:自适应排版HTML自动打印(推荐,适配所有场景)

核心逻辑是先对表格做打印适配排版,生成临时HTML后自动调起系统打印预览,表格会自动适配纸张大小、分页、列宽,可读性远高于原生导出的PDF/HTML文件。

  • 依赖安装:pip install pretty-html-table
  • 代码示例:
import pandas as pd
from pretty_html_table import build_table
import tempfile
import webbrowser
import os

def print_df(df):
    # 生成适配打印的美化表格,可自行调整字体大小、边距、配色
    table_html = build_table(
        df, 
        theme='blue_light', 
        font_size='12px', 
        padding='6px', 
        text_align='left'
    )
    # 嵌入自动打印脚本和打印样式,默认横向打印、边距1cm
    full_html = f"""
    <html>
    <head>
    <meta charset="UTF-8">
    <style>
    @media print {
        @page { size: landscape; margin: 1cm; }
        table { border-collapse: collapse; width: 100%; }
        th, td { border: 1px solid #ddd; padding: 6px; }
    }
    </style>
    </head>
    <body onload="window.print(); setTimeout(() => window.close(), 100);">
    {table_html}
    </body>
    </html>
    """
    # 生成临时HTML文件自动打开,用完即删不留垃圾
    with tempfile.NamedTemporaryFile('w', suffix='.html', delete=False, encoding='utf-8') as f:
        f.write(full_html)
        temp_path = f.name
    webbrowser.open_new(temp_path)
    os.unlink(temp_path)
  • 操作流程:用户点击打印按钮后,系统自动弹出打印预览,确认打印机后点击「打印」即可,全程无需额外操作。

方案2:无预览直接打印(适合固定格式场景)

如果不需要用户调整打印参数,可直接调用系统默认打印机完成打印,全程无弹窗。

  • 依赖安装:pip install pywin32(仅支持Windows系统)
  • 代码示例:
import pandas as pd
import win32print
import win32ui
import win32con

def print_df_direct(df):
    # 转成等宽格式化文本,可调整列宽适配纸张
    formatted_content = df.to_string(col_space=12, justify='left', max_colwidth=30)
    default_printer = win32print.GetDefaultPrinter()
    h_printer = win32print.OpenPrinter(default_printer)
    try:
        h_dc = win32ui.CreateDC()
        h_dc.CreatePrinterDC(default_printer)
        h_dc.StartDoc('DataFrame打印任务')
        h_dc.StartPage()
        h_dc.SetMapMode(win32con.MM_TWIPS)
        # 调整起始位置和行间距适配纸张大小
        y_pos = 14000
        for line in formatted_content.split('\n'):
            h_dc.TextOut(200, y_pos, line)
            y_pos -= 200
            # 超过页高自动换页
            if y_pos < 1000:
                h_dc.EndPage()
                h_dc.StartPage()
                y_pos = 14000
        h_dc.EndPage()
        h_dc.EndDoc()
    finally:
        win32print.ClosePrinter(h_printer)

两种方案都完全规避了用户手动操作文件的流程,你可以根据你的应用场景选择对应方案。

内容的提问来源于stack exchange,提问作者Kushagra Jain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 04:51:01