PhpWord表格自适应窗口列序反转及setWidth方法报错求助
解决PhpWord表格自适应宽度及列序反转问题
一、解决列顺序反转问题
设置表格为百分比宽度时出现列序反转,是因为表格默认可能启用了从右到左(RTL)的文本方向,只需在表格样式中添加'dir' => 'ltr'强制设置从左到右布局即可:
$table = $section->addTable(array( 'unit' => 'pct', 'width' => 5000, // 代表100%宽度 'dir' => 'ltr' // 强制从左到右排列 ));
同时注意单元格宽度的取值逻辑:PhpWord中百分比宽度以50为1%的基准,100%对应5000,单元格宽度也需遵循此规则。比如要设置单元格占70%和30%,应分别传入3500和1500(7050=3500,3050=1500),确保单元格总宽度与表格宽度匹配:
$table->addRow(); $table->addCell(3500)->addText('cell 1'); // 70%宽度 $table->addCell(1500)->addText('cell 2'); // 30%宽度
二、解决Undefined class constant 'WIDTH_PERCENT'错误
WIDTH_PERCENT并非\PhpOffice\PhpWord\Style\Table类的常量,正确的百分比类型常量在\PhpOffice\PhpWord\ComplexType\TblWidth类中,名为TYPE_PERCENT。正确的表格样式设置方式如下:
$table_style = new \PhpOffice\PhpWord\Style\Table(); // 使用TblWidth类的TYPE_PERCENT常量 $table_style->setUnit(\PhpOffice\PhpWord\ComplexType\TblWidth::TYPE_PERCENT); $table_style->setWidth(5000); // 100%宽度 $table = $section->addTable($table_style); // 强制从左到右布局避免列序反转 $table->getStyle()->setDir('ltr');
或者直接通过数组参数创建表格,写法更简洁:
$table = $section->addTable(array( 'unit' => \PhpOffice\PhpWord\ComplexType\TblWidth::TYPE_PERCENT, 'width' => 5000, 'dir' => 'ltr' ));
修正后的完整代码
<?php include_once '../vendor/autoload.php'; $phpWord = new \PhpOffice\PhpWord\PhpWord(); use PhpOffice\PhpWord\Element\Table; use PhpOffice\PhpWord\TemplateProcessor; use PhpOffice\PhpWord\ComplexType\TblWidth; use PhpOffice\PhpWord\Settings; use PhpOffice\PhpWord\SimpleType\Border; $section = $phpWord->addSection(); // 配置表格自适应宽度+从左到右布局 $table = $section->addTable(array( 'unit' => 'pct', 'width' => 5000, 'dir' => 'ltr' )); $table->addRow(); // 匹配表格总宽度的单元格比例 $table->addCell(3500)->addText('cell 1'); $table->addCell(1500)->addText('cell 2'); $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007'); $objWriter->save('1711output.docx'); ?>
内容的提问来源于stack exchange,提问作者Premlatha
相关产品推荐
相关产品推荐

