PHPWord生成目录仅添加最后一页一级标题问题求助
解决PHPWord生成目录仅显示最后一个一级标题的问题
问题场景
使用PHPWord生成目录时,在不同页面添加了2个一级标题,但输出文件的目录中仅显示最后一个一级标题。

原代码
<?php include_once 'vendor/phpoffice/phpword/src/PhpWord/bootstrap.php'; $phpWord = new \PhpOffice\PhpWord\PhpWord(); $phpWord->getSettings()->setUpdateFields(true); $section = $phpWord->addSection(); $phpWord->addSection(['pageNumberingStart' => 0]); $section->addText('Table of Content', 'title'); $section->addToc(); $section = $phpWord->addSection(); $section->addTitle('Título 1', 1); $section->addPageBreak(); $section = $phpWord->addSection(); $section->addTitle('Titulo 2', 1); $section->addPageBreak(); $phpWord->save('sampleTocOutput.docx');
问题原因
代码核心问题是额外创建了一个未使用的Section:在给$section赋值第一个Section后,又调用$phpWord->addSection(['pageNumberingStart' => 0])生成新Section,但未将其赋值给变量,后续目录仍添加在第一个未设置页码规则的Section中。这种Section管理混乱导致PHPWord无法正确关联所有标题的页码信息,最终仅识别到最后一个标题。
解决方案
将目录所在的Section直接设置为页码从0开始(避免目录占用正文页码),后续正文Section自动延续页码即可。修改后的代码如下:
<?php include_once 'vendor/phpoffice/phpword/src/PhpWord/bootstrap.php'; $phpWord = new \PhpOffice\PhpWord\PhpWord(); $phpWord->getSettings()->setUpdateFields(true); // 创建目录Section,设置页码从0开始 $section = $phpWord->addSection(['pageNumberingStart' => 0]); $section->addText('目录', 'title'); $section->addToc(); // 正文第一个Section,页码自动从1开始 $section = $phpWord->addSection(); $section->addTitle('标题1', 1); $section->addPageBreak(); // 正文第二个Section $section = $phpWord->addSection(); $section->addTitle('标题2', 1); $section->addPageBreak(); $phpWord->save('sampleTocOutput.docx');
补充说明
生成docx文件后,若Word未自动更新目录,可选中目录后按F9键手动刷新,即可看到完整的目录条目。
内容的提问来源于stack exchange,提问作者Premlatha
相关产品推荐
相关产品推荐

