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

FPDF MultiCell自动分页问题:如何避免测验题目跨页显示

解决FPDF MultiCell内容跨页拆分问题

要实现包含题目和选项的完整段落不跨页打印,核心是提前计算段落所需高度,判断当前页面剩余空间是否足够,不足则自动新建页面。

实现步骤

  1. 编写辅助函数,计算指定文本生成MultiCell所需的高度
  2. 在循环打印每个题目时,计算当前题目(含上方间距)的总高度
  3. 对比页面剩余空间,若不足则新增页面
  4. 执行打印操作

代码实现

首先添加计算MultiCell高度的辅助函数:

def calculate_multicell_height(pdf, text, cell_height=4):
    original_y = pdf.get_y()
    # 计算MultiCell的实际宽度(0对应占满页面可用宽度)
    cell_width = pdf.w - pdf.l_margin - pdf.r_margin
    # 模拟生成MultiCell以获取高度(不显示边框)
    pdf.multi_cell(cell_width, cell_height, text, border=0)
    total_height = pdf.get_y() - original_y
    # 恢复原始光标位置
    pdf.set_y(original_y)
    return total_height

然后修改原循环代码:

for question in questions:
    spacing = 4
    # 计算当前题目所需的总高度:间距 + MultiCell高度
    cell_height = calculate_multicell_height(pdf, question, cell_height=4)
    total_required = spacing + cell_height
    
    # 获取当前页面剩余可用高度
    remaining_height = pdf.page_break_trigger - pdf.get_y()
    
    # 剩余空间不足则新建页面
    if remaining_height < total_required:
        pdf.add_page()
    
    # 打印题目和选项
    pdf.ln(spacing)
    pdf.multi_cell(0, 4, question, 1)

说明

  • 辅助函数通过模拟生成MultiCell来计算高度,不会影响实际打印内容
  • page_break_trigger是FPDF内置的分页触发位置,确保内容不会超出页面底部边距
  • 此方法能保证每个题目(含所有选项)完整显示在同一页面,不会出现跨页拆分的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:39:24