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

从MySQL读取数据生成PDF时单元格文本无法换行的解决方案求助

解决MySQL数据插入PDF时单元格文本溢出的问题

看起来你遇到的是FPDF中Cell()方法不支持自动换行的问题——默认情况下,Cell()只会在一行内显示文本,一旦内容长度超过单元格宽度,就会溢出边界。要实现文本在单元格内自动换行,我们需要改用MultiCell()方法,它专门处理需要换行的文本内容,同时保持表格的整齐布局。

具体解决方案

首先,我们用MultiCell()替代原来的Cell()来处理orders和addons这类可能过长的字段,同时通过坐标定位确保同一行的所有单元格对齐:

include 'restaurantconnect.php';
$count=0;
$sql="SELECT * FROM `restaurant`";
$result = $conn->query($sql);

// 确保字体已设置(如果之前没初始化的话)
$pdf->SetFont('Arial','',12);

while($inventory = $result->fetch_assoc()){
    $concat = $inventory['first_name'] . " " . $inventory['last_name'];
    // 保存当前行的起始坐标,用于后续定位
    $startX = $pdf->GetX();
    $startY = $pdf->GetY();
    
    // 第一个单元格:food_id(右对齐)
    $pdf->MultiCell(25, 5, $inventory['food_id'], 1, 'R', false);
    $pdf->SetXY($startX + 25, $startY); // 定位到下一个单元格
    
    // 第二个单元格:姓名(居中对齐)
    $pdf->MultiCell(50, 5, $concat, 1, 'C', false);
    $pdf->SetXY($startX + 25 + 50, $startY);
    
    // 第三个单元格:package(左对齐)
    $pdf->MultiCell(20, 5, $inventory['package'], 1, 'L', false);
    $pdf->SetXY($startX + 25 + 50 + 20, $startY);
    
    // 第四个单元格:orders(自动换行,可选:把逗号换成换行符优化显示)
    $ordersText = str_replace(',', "\n", $inventory['orders']);
    $pdf->MultiCell(100, 5, $ordersText, 1, 'L', false);
    $pdf->SetXY($startX + 25 + 50 + 20 + 100, $startY);
    
    // 第五个单元格:addons(自动换行,结束当前行)
    $addonsText = str_replace(',', "\n", $inventory['addons']);
    $pdf->MultiCell(70, 5, $addonsText, 1, 'L', false);
    
    // 调整下一行的起始位置,确保行高足够容纳最长的文本
    $maxLines = max(substr_count($ordersText, "\n") + 1, substr_count($addonsText, "\n") + 1);
    $requiredHeight = 5 * $maxLines;
    if($pdf->GetY() < $startY + $requiredHeight){
        $pdf->SetY($startY + $requiredHeight);
    }
}

关键说明

  • MultiCell()参数:依次是单元格宽度、每行高度、显示文本、边框样式、对齐方式、是否填充背景。它会自动将文本在指定宽度内换行,并且根据文本行数调整单元格高度。
  • 坐标定位:用GetX()/GetY()获取当前光标位置,再用SetXY()将光标移到下一个单元格的起始位置,避免因MultiCell自动换行导致的单元格错位。
  • 优化显示:把orders字段里的逗号替换成换行符,让每个菜品单独占一行,阅读起来更清晰。

这样修改后,orders和addons的内容就会在各自的单元格内自动换行,不会再溢出边界了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:32:28