后端【免费下载链接】PHPWordA pure PHP library for reading and writing word processing documents项目地址https://gitcode.com/gh_mirrors/ph/PHPWord点击查看免费下载导读本文基于 PHPWord 官方文档 docs/usage/styles/numberinglevel.md 展开系统讲解NumberingLevel样式中的全部可用配置项——alignment、font、format、hanging、hint、left、restart、start、suffix、tabPos、text并结合仓库源码如 NumberingLevel.php与真实示例Sample_14_ListItem.php逐项剖析其取值、默认值、底层校验逻辑与 OOXML 输出映射。读完本文你将掌握如何在 PHPWord 中创建单级、多级、带标题编号的多级列表以及如何用%1、%2占位符组合出1.1、1.1.1这类标准 Word 编号。NumberingLevel 在 PHPWord 中的定位在 PHPWord 中NumberingLevelsrc/PhpWord/Style/NumberingLevel.php表示编号列表的一个层级定义。它并不是独立存在、直接使用的样式对象而是被包含在Numbering样式src/PhpWord/Style/Numbering.php的levels数组中Numbering样式代表一整条编号定义对应 OOXML 中的w:abstractNum持有numId、typesingleLevel/multilevel/hybridMultilevel以及levels数组数组中的每个元素就是一个NumberingLevel对应 OOXML 中的w:lvl节点用w:ilvl属性标记层级序号08共 9 级。从源码看Numbering::setLevels()会把传入的数组逐项封装为NumberingLevel实例若某项是数组则通过setStyleByArray()批量设置属性并把数组键作为level层级号src/PhpWord/Style/Numbering.php。而level字段的默认值为0取值范围 08src/PhpWord/Style/NumberingLevel.php。全部可用配置项速查原文档列出的NumberingLevel可用配置项如下我们逐一给出取值、默认值与底层行为配置项含义取值 / 默认值OOXML 节点alignment编号符号的对齐方式\PhpOffice\PhpWord\SimpleType\Jc常量默认w:lvlJcfont编号符号使用的字体名字符串如Arialw:rFontsformat编号格式decimal|upperRoman|lowerRoman|upperLetter|lowerLetter|bullet等w:numFmthanging悬挂缩进参照段落样式整数twipw:ind的w:hanging属性hint字体内容类型参照字体样式default|eastAsia|csw:rFonts的w:hint属性left左缩进参照段落样式整数twipw:ind的w:left属性restart重新开始编号的层级符号整数w:lvlRestartstart起始值整数默认1w:startsuffix编号符号与段落文本之间的分隔tab默认|space|nothingw:sufftabPos制表位位置参照段落样式整数twipw:tab的w:pos属性text编号层级文本如%1非项目符号或项目符号字符w:lvlText各配置项深度解析format编号格式format决定这一层级用什么符号体系计数由NumberFormat简单类型src/PhpWord/SimpleType/NumberFormat.php约束。原文档列出常用六种实际NumberFormat枚举支持远多于此decimal阿拉伯数字 1, 2, 3…upperRoman大写罗马数字 I, II, III…lowerRoman小写罗马数字 i, ii, iii…upperLetter大写字母 A, B, C…lowerLetter小写字母 a, b, c…bullet项目符号配合text里的符号字符使用除此之外NumberFormat还定义了ordinal、cardinalText、ordinalText、hex、chicago、decimalEnclosedCircle、decimalZero、japaneseCounting、chineseCounting、koreanCounting、thaiCounting、hebrew1、arabicAlpha、hindiNumbers等大量扩展格式覆盖中日韩、泰语、希伯来语、阿拉伯语、俄语等本地化编号体系。设置时通过setFormat()走setEnumVal()白名单校验传入非法值会被忽略并保留原值src/PhpWord/Style/NumberingLevel.php。text编号层级文本与%n占位符text是这一层级的显示文本模板是理解多级编号的关键对非项目符号层级使用%1、%2…%9占位符引用各级编号。例如%1.表示第 1 级编号 句点%1.%2表示第 1 级编号 句点 第 2 级编号对项目符号层级text直接写符号字符例如•或Word 默认 bullet 字符。注意text是纯字符串存储setText()不做格式校验src/PhpWord/Style/NumberingLevel.php占位符语义由 Word 在渲染时解析PHPWord 负责原样写入w:lvlText。start 与 restart起始值与重新开始start该层级的起始计数默认1src/PhpWord/Style/NumberingLevel.php。对应 OOXMLw:start由setIntVal()校验为整数restart指定从哪一级开始重新计数。例如三级列表中设置第 2 级的restart为 1表示每次第 1 级变化时第 2 级重新从 1 开始。对应 OOXMLw:lvlRestart同样以整数存储。二者都是可选整数未设置时null不会输出对应 XML 节点——这一点由 Word2007 写回端的空值判断保证。alignment编号对齐方式alignment控制编号符号在缩进区域内的水平对齐取值来自Jc简单类型src/PhpWord/SimpleType/Jc.php其常量覆盖从 ECMA-376 第 1 版到 ISO/IEC 29500:2012 的全部对齐模式Jc::STARTstart、Jc::CENTERcenter、Jc::ENDend、Jc::BOTHboth现代对齐mediumKashida、distribute、numTab、highKashida、lowKashida、thaiDistribute兼容旧版 ECMA-376 的Jc::LEFTleft、Jc::RIGHTright、Jc::JUSTIFYjustify自 0.13.0 起标记为deprecated分别建议改用START、END、BOTH——原因在于 Microsoft Word 2007 与 WPS Writer 2016 仍依赖旧值。setAlignment()通过Jc::isValid()校验合法性非法值不生效src/PhpWord/Style/NumberingLevel.php。该配置项自 0.13.0 起可用对应 OOXMLw:lvlJc。left、hanging、tabPos与段落样式共享的缩进三件套这三个配置项在 段落样式文档 中也有对应语义在NumberingLevel中用于定义编号行的版式left编号行的左缩进twip对应w:ind的w:left属性。多级嵌套时逐级增大如 360、720、1080hanging悬挂缩进twip对应w:ind的w:hanging属性。悬挂缩进让编号符号向左凸出、正文文本对齐到left - hanging的位置是多级列表的标准观感tabPos编号符号之后制表位的位置twip对应w:tabs/w:tab的w:pos属性且该制表位类型固定为num。三者在写回端统一由writeParagraph()输出为w:pPr节点src/PhpWord/Writer/Word2007/Part/Numbering.php。suffix编号与正文之间的分隔符suffix定义编号符号与段落文本之间插入什么内容可选值为tab默认、space、nothingsrc/PhpWord/Style/NumberingLevel.php。三者含义tab插入制表符配合tabPos让正文对齐到制表位最常用space插入一个空格nothing直接紧跟正文。setSuffix()同样走枚举白名单校验src/PhpWord/Style/NumberingLevel.php对应 OOXMLw:suff。font 与 hint编号符号的字体控制font编号符号使用的字体名如Arial纯字符串存储src/PhpWord/Style/NumberingLevel.phphint字体内容类型可选default、eastAsia、cs语义与 字体样式文档 中的hint一致用于指示这段文本按哪种文字体系渲染默认 / 东亚 / 复杂文种。写回时二者共同输出为w:rPr/w:rFonts节点font同时写入w:ascii、w:hAnsi、w:cs三个属性hint写入w:hint属性src/PhpWord/Writer/Word2007/Part/Numbering.php。附带配置项pStyle虽然不在原文档列表内但源码中NumberingLevel还支持pStyle关联的段落样式名对应 OOXMLw:pStyle用于标题自动编号场景——把编号层级绑定到Heading1、Heading2等段落样式上让标题自动带编号。多级标题编号正是通过它实现的详见下文实战。从配置到 OOXML底层写回原理理解配置项如何落地能让参数调优更有依据。Word2007 编号写回端src/PhpWord/Writer/Word2007/Part/Numbering.php把每条Numbering样式输出为w:abstractNum抽象编号定义 w:num编号实例引用遍历所有已注册样式找出NumberingStyle实例为每个实例生成w:abstractNum含随机w:nsid与w:multiLevelType并遍历其levels逐个调用writeLevel()再次遍历生成w:num实例通过w:abstractNumId指向对应抽象定义writeLevel()输出w:lvl节点先写w:ilvl层级号再依次输出w:start、w:numFmt、w:lvlRestart、w:pStyle、w:suff、w:lvlText、w:lvlJc仅当属性非空非 null 时写出见 src/PhpWord/Writer/Word2007/Part/Numbering.php最后输出段落与字体属性。这一映射关系意味着配置项与最终 docx 中word/numbering.xml的 XML 节点一一对应你在 PHP 侧设置的每个值都能在生成的文档里找到归属。实战一用 addNumberingStyle 创建多级列表NumberingLevel配置的入口是PhpWord::addNumberingStyle()src/PhpWord/PhpWord.php它在 Style.php 中实例化Numbering并把传入的levels数组交给setLevels()处理。官方示例 Sample_14_ListItem.php 给出了完整用法$phpWord new PhpOffice\PhpWord\PhpWord(); $multilevelNumberingStyleName multilevel; $phpWord-addNumberingStyle( $multilevelNumberingStyleName, [ type multilevel, levels [ // 第 1 级1. 2. 3. [format decimal, text %1., left 360, hanging 360, tabPos 360], // 第 2 级A. B. C. [format upperLetter, text %2., left 720, hanging 360, tabPos 720], ], ] ); $section $phpWord-addSection(); $section-addListItem(List Item I, 0, null, $multilevelNumberingStyleName); // 1. $section-addListItem(List Item I.a, 1, null, $multilevelNumberingStyleName); // A. $section-addListItem(List Item I.b, 1, null, $multilevelNumberingStyleName); // B. $section-addListItem(List Item II, 0, null, $multilevelNumberingStyleName); // 2. $section-addListItem(List Item II.a, 1, null, $multilevelNumberingStyleName); // A.要点addListItem($text, $depth, $fontStyle, $listStyle)的第二个参数$depth对应NumberingLevel的level0 起决定该条目落在第几级示例中第 2 级使用format upperLettertext %2.产出的是大写字母编号缩进参数left、hanging、tabPos建议逐级递增360 → 720以形成清晰的多级层次。若想让编号从某个非 1 值开始可在对应层级数组中加入start 5若希望子级在父级切换时重新计数加入restart 1。实战二多级标题自动编号NumberingLevel还能与标题样式联动生成1 / 1.1 / 1.1.1式的章节编号这在同一官方示例 Sample_14_ListItem.php 中展示$headingNumberingStyleName headingNumbering; $phpWord-addNumberingStyle( $headingNumberingStyleName, [type multilevel, levels [ [pStyle Heading1, format decimal, text %1], [pStyle Heading2, format decimal, text %1.%2], [pStyle Heading3, format decimal, text %1.%2.%3], ], ] ); $phpWord-addTitleStyle(1, [size 16], [numStyle $headingNumberingStyleName, numLevel 0]); $phpWord-addTitleStyle(2, [size 14], [numStyle $headingNumberingStyleName, numLevel 1]); $phpWord-addTitleStyle(3, [size 12], [numStyle $headingNumberingStyleName, numLevel 2]); $section-addTitle(Heading 1, 1); $section-addTitle(Heading 2, 2); $section-addTitle(Heading 3, 3);这里的核心是组合使用每个层级通过pStyle绑定到Heading1/Heading2/Heading3段落样式text用%1、%1.%2、%1.%2.%3组合占位符输出1、1.1、1.1.1的多级章节编号addTitleStyle($depth, $fontStyle, $paragraphStyle)的第三参数通过numStylenumLevel指定编号样式与层级。从源码结构看pStyle最终由写回端输出为w:lvl/w:pStyle节点见上文属性映射表Word 据此将编号附着到对应标题段落上。这是实现论文式自动编号目录最直接的方式。补充能力ListItemRun 与读取回写除了addListItem()PHPWord 还提供ListItemRunsrc/PhpWord/Element/ListItemRun.php——它是TextRun的子类允许在同一个列表项内混排多种内联格式加粗、斜体、下划线、脚注等。其构造函数同样接收$depth层级与列表样式名src/PhpWord/Element/ListItemRun.phpSample 14 中即有示例$listItemRun $section-addListItemRun(); $listItemRun-addText(List item 1); $listItemRun-addText( in bold, [bold true]);另外NumberingLevel的参数校验由测试用例覆盖如 tests/PhpWordTests/Style/NumberingLevelTest.php 验证了level/start/restart/left/hanging/tabPos等整数属性与format/pStyle/suffix/text/alignment/font/hint等字符串属性的 set/get 往返行为tests/PhpWordTests/Style/NumberingTest.php 验证了numId、type与levels数组的默认值。如果你需要深入验证自定义配置可直接参照这些测试的断言方式。小结NumberingLevel是 PHPWord 多级列表能力的最小积木format决定符号体系text用%n占位符拼出显示模板left/hanging/tabPos控制缩进与对齐版式start/restart管理计数行为font/hint/alignment负责外观细节suffix定义编号与正文的衔接。配合Numbering样式容器与addNumberingStyle()/addListItem()入口即可在纯 PHP 环境下生成与 Word 原生多级列表、自动编号标题行为一致的 docx 文档。遇到任何参数取值的疑问以 NumberFormat.php、Jc.php 两个枚举类以及 Numbering.php 的 XML 映射为准。赞分享后端【免费下载链接】PHPWordA pure PHP library for reading and writing word processing documents项目地址https://gitcode.com/gh_mirrors/ph/PHPWord点击查看免费下载相关推荐PHPWord 列表List完整指南addListItem 与 addListItemRun 的使用与自定义编号样式PHPWord 列表List完整指南addListItem 与 addListItemRun 的使用与自定义编号样式 本篇技术指南以 PHPWord 官方后端Grid Garden终极CSS网格布局学习游戏的完整解析Grid Garden终极CSS网格布局学习游戏的完整解析 Grid Garden是一款创新的前端教育游戏通过游戏化方式让开发者轻松掌握CSS Grid布局poi-tl列表编号功能详解支持多级有序列表渲染的终极指南poi tl列表编号功能详解支持多级有序列表渲染的终极指南 poi tl作为一款强大的Java Word文档模板引擎其列表编号功能能够完美支持多级有序列表渲模板引擎后端上一篇localGPT查询转换自然语言到搜索查询的智能转换下一篇解决MIPS软浮点架构兼容性难题Nebula端口号字节序问题深度解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考