使用PHP与TCPDF生成PDF时,如何实现单元格并排的横向表格?
解决TCPDF横向表格(表头与值分别同行并排)的实现问题
需求说明
使用TCPDF生成PDF时,需将自定义字段以横向表格展示,要求:
- 所有表头在同一行并排
- 对应的值也在同一行并排
预期格式:
header | header | header | header // 所有表头在一行 Value | Value | Value | Value // 所有对应值在一行
现有代码问题
- 原代码1:尝试给
<tr>设置display: table-cell,但无法实现单元格并排,不符合预期 - 修改后的代码:每个表头与对应值单独占一行,形成纵向表格,不符合需求
正确实现方案
核心思路:先收集所有非空字段的名称和值,再分别构建单一行的表头和单一行的值,而非为每个字段单独生成行。
完整代码
$tableHTML = '<table>'; $fieldNames = []; $fieldValues = []; foreach ($pdf_custom_fields as $field) { $value = get_custom_field_value($estimate->id, $field['id'], 'estimate'); if ($value == '') { continue; } // 收集非空的字段名和对应值 $fieldNames[] = $field['name']; $fieldValues[] = $value; } // 仅当有非空字段时构建表格行 if (!empty($fieldNames)) { // 构建表头行(所有<th>在同一个<tr>内) $tableHTML .= '<tr>'; foreach ($fieldNames as $name) { $tableHTML .= '<th style="border: 1px solid #999; font-weight:bold; color: #fff; background-color:#242c39;">' . htmlspecialchars($name) . '</th>'; } $tableHTML .= '</tr>'; // 构建值行(所有<td>在同一个<tr>内) $tableHTML .= '<tr>'; foreach ($fieldValues as $value) { $tableHTML .= '<td style="border: 1px solid #999;">' . htmlspecialchars($value) . '</td>'; } $tableHTML .= '</tr>'; } $tableHTML .= '</table>'; // 将表格添加到指定变量 $organization_info2 .= $tableHTML;
代码要点
- 过滤空字段:跳过值为空的字段,避免表格出现空单元格
- 同行构建:表头所有单元格放在一个
<tr>中,值的所有单元格也放在一个<tr>中,确保横向并排 - 安全处理:用
htmlspecialchars()转义字段名和值中的特殊字符,防止破坏HTML结构,适配TCPDF的HTML解析
内容的提问来源于stack exchange,提问作者Wonder In Wonderland
相关产品推荐
相关产品推荐

