在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
相关产品推荐
相关产品推荐

