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

如何用FPDF将DataFrame逐行打印到PDF并实现页面对齐

使用FPDF实现DataFrame的PDF表格对齐打印

问题分析

你之前的代码把整行数据拼接成单个字符串放入一个单元格,导致内容无法按列对齐。要实现规整的表格,需要为每一列分配独立的单元格,并统一列宽、添加边框,同时单独处理表头和数据行。

解决方案代码

from fpdf import FPDF
import pandas as pd

# 初始化PDF对象,设置单位为英寸,纸张为letter
pdf = FPDF(format='letter', unit='in')
pdf.add_page()
# 设置左右边距
pdf.set_left_margin(0.5)
pdf.set_right_margin(0.5)

# --- 打印页面其他数据(示例:标题、说明)---
pdf.set_font('helvetica', 'B', 12)
pdf.cell(w=0, h=0.5, txt="产品清单", ln=True, align='C')
pdf.ln(0.2)  # 换行留白

pdf.set_font('helvetica', '', 10)
pdf.cell(w=0, h=0.3, txt="生成日期:2024年5月20日", ln=True, align='R')
pdf.ln(0.3)

# --- 准备DataFrame数据 ---
data = [
    [1, 'denumire1', 'cant1', 'pret1', 'valoare1'],
    [2, 'denumire2', 'cant2', 'pret2', 'valoare2'],
    [3, 'denumire3', 'cant3', 'pret3', 'valoare3'],
    [4, 'denumire4', 'cant4', 'pret4', 'valoare4'],
]
df = pd.DataFrame(data, columns=['Nr. crt.', 'Denumire', 'Cant.', 'Pret unitar', 'Valoarea'])

# --- 定义表格列宽(总可用宽度7.5英寸,按列内容分配)---
col_widths = [0.8, 2.5, 1.2, 1.5, 1.5]  # 总和7.5,适配letter纸宽度

# --- 打印表头 ---
pdf.set_font('helvetica', 'BU', 10)
for col, width in zip(df.columns, col_widths):
    # 单元格参数:宽度、高度、内容、边框(1=显示边框)、是否换行(0=不换行,继续下一个cell)、对齐方式
    pdf.cell(w=width, h=0.4, txt=col, border=1, ln=0, align='C')
pdf.ln()  # 表头行结束后换行

# --- 打印数据行 ---
pdf.set_font('helvetica', '', 9)
for _, row in df.iterrows():
    for idx, width in enumerate(col_widths):
        content = str(row.iloc[idx])
        # 数据单元格左对齐,表头居中,保持统一边框
        pdf.cell(w=width, h=0.35, txt=content, border=1, ln=0, align='L')
    pdf.ln()  # 每行结束后换行

# --- 可添加更多页面数据(示例:合计行)---
pdf.ln(0.2)
pdf.set_font('helvetica', 'B', 10)
pdf.cell(w=sum(col_widths[:4]), h=0.4, txt="总计:", border=1, ln=0, align='R')
pdf.cell(w=col_widths[-1], h=0.4, txt="计算值", border=1, ln=1, align='R')

# 输出PDF
pdf.output('test_table.pdf', 'F')

关键说明

  • 列宽分配:根据每列内容的长度设置对应宽度,确保内容不拥挤且整体适配页面
  • 单元格边框:通过border=1显示表格边框,提升可读性
  • 字体与对齐:表头使用加粗下划线字体并居中,数据行左对齐,区分层级
  • 其他数据插入:在表格前后可自由添加标题、日期、合计等内容,只需调整pdf.cell和pdf.ln控制排版

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:45:42