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

在CodeIgniter中生成Word时如何设置页眉左/中对齐并解决错位问题?

解决PhpWord页眉左、中布局错位问题

从你遇到的情况来看,页眉里左侧的地址信息和中间的logo、公司名称上下错位,布局混乱,问题出在你直接用addText和addImage逐个添加页眉元素(默认会垂直堆叠),还错误使用了colsNum参数——这个参数是给文档整体分栏用的,根本控制不了页眉元素的布局。

要实现规整的左、中布局,最可靠的方式是用表格来固定结构,表格能精确对齐不同区域的内容,彻底避免错位。下面是修改后的完整代码:

foreach($news as $n){ 
    $section = $phpWord->addSection(); 
    $header = $section->addHeader(); 

    // 创建页眉表格,隐藏边框,用单元格划分左、中区域
    $table = $header->addTable(array('borderSize' => 0));
    $table->addRow();
    
    // 左侧单元格:放置地址、GSTIN等信息
    $leftCell = $table->addCell(4000, array('valign' => 'top'));
    $leftCell->addText(
        "Branch Address :\n".
        "SARATHY MAIN WORKSHOP\n".
        "Sarathy Bajaj\n".
        "Pallimukku\n".
        "Kollam-10,\n".
        "Kerala[State Code:32]\n\n".
        "GSTIN: 32ABQFS6676M1ZA",
        array('bold' => true, 'name'=> 'times new roman', 'size' => 9),
        array('align' => 'left', 'lineHeight' => 1)
    );

    // 中间单元格:放置logo、公司名称、发票标题
    $middleCell = $table->addCell(2000, array('valign' => 'top'));
    $middleCell->addImage($targetFile.'bajaj.png', array('align' => 'center','width'=>150, 'height'=>100));
    $middleCell->addText("SARATHY MOTORS", array('bold' => true,'name'=> 'times new roman','size' => 12,'color' =>'black'),array('align' => 'center'));
    $middleCell->addText("Sarathy Bajaj Pallimukku Kollam Kerala State", array('bold' => true,'name'=> 'times new roman','size' => 9),array('align' => 'center','lineHeight' =>1));
    $middleCell->addText("Code:32 Kerala[State Code:32]", array('bold' => true,'name'=> 'times new roman','size' => 9),array('align' => 'center','lineHeight' =>1));
    $middleCell->addTextBreak(1);
    $middleCell->addText("Tax Invoice", array('bold' => true,'underline' => 'single','name'=> 'arial','size' => 21),array('align' => 'center','color' =>'black'));

    // 添加页眉分隔线
    $lineStyle = array('weight'=>1,'width' =>590,'height' => 0,'align'=>'left','color' => 'black'); 
    $header->addLine($lineStyle); 

    // 正文内容保持不变
    $section->addText($n['inv_jcard_date'], array('name'=> 'arial','size' => 14),array('align' => 'left', 'spaceAfter' => 10)); 
    $section->addText($n['inv_no'], array('name'=> 'arial','size' => 14),array('align' => 'right', 'spaceAfter' => 10)); 
} 

$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007'); 
$objWriter->save($filename);

核心修改点说明:

  • 用无框表格替代零散的文本/图片添加,通过两个单元格明确划分左、中区域,确保内容水平对齐
  • 设置单元格valign为top,让左右内容从顶部开始对齐,彻底解决垂直错位问题
  • 把左侧多行文本合并成一个addText(用\n换行),减少不必要的换行指令,让布局更紧凑
  • 移除了原代码中无效的colsNum参数,改用表格布局实现预期的分栏效果
  • 中间区域的内容统一放在一个单元格里,保证居中元素的整体规整性

这样修改后,页眉的左、中内容就能稳定保持在同一水平区域,不会再出现错位问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:53:48