尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

PHPWord 文本元素实战指南:addText 与 addTextRun 的完整用法与样式解析

发布时间:2026/9/28 3:14:11

资讯中心
01
ARTICLE

PHPWord 文本元素实战指南:addText 与 addTextRun 的完整用法与样式解析

PHPWord 文本元素实战指南:addText 与 addTextRun 的完整用法与样式解析
后端【免费下载链接】PHPWordA pure PHP library for reading and writing word processing documents项目地址https://gitcode.com/gh_mirrors/ph/PHPWord点击查看免费下载本文围绕 PHPWord纯 PHP 读写 Word 文档的开源库中最基础的文本写入能力展开系统讲解addText与addTextRun两种文本添加方式的适用场景、参数约定、字体与段落样式配置并结合仓库源码与官方示例深入解析底层实现与修订跟踪Track Changes用法。读完本文你将掌握在 Section、Cell、Header/Footer 等任意容器中写入格式化文本的完整方案并能直接复用可运行代码。一、两种文本添加方式addText 与 addTextRun在 PHPWord 中文本通过addText与addTextRun两个方法写入。二者的选择标准是段落内部样式的复杂度addText用于创建只包含同一样式的简单段落。一段文字整体使用一套字体样式和段落样式一行代码即可完成。addTextRun用于创建包含多种样式的复杂段落——同一段落内既有加粗、又有斜体、还有不同颜色、甚至嵌入图片或链接等元素时使用。两者的基础语法如下摘自 docs/usage/elements/text.md?php $section-addText($text, [$fontStyle], [$paragraphStyle]); $textrun $section-addTextRun([$paragraphStyle]);三个参数的含义$text要显示在文档中的文本内容。$fontStyle字体样式。既可以是命名样式名也可以是样式数组可选项参见 Styles Font。$paragraphStyle段落样式。同样可以是命名样式名或样式数组可选项参见 Styles Paragraph。从源码看addText和addTextRun均声明在抽象容器类 AbstractContainer.php 的method注释中实际调用由__call魔术方法统一分派AbstractContainer.php并通过checkValidity校验当前容器是否允许添加该元素AbstractContainer.php。因此这两个方法在 Section、Header、Footer、Cell、TextBox 等几乎所有容器内都可用。二、addText简单段落文本addText适合整段文字使用统一字体的场景。官方示例 Sample_01_SimpleText.php 展示了最基础与最常用的调用形式?php $phpWord new PhpOffice\PhpWord\PhpWord(); $section $phpWord-addSection(); // 最简形式仅文本 $section-addText(Hello World!); // 使用命名字体样式 $fontStyleName rStyle; $phpWord-addFontStyle($fontStyleName, [ bold true, italic true, size 16, allCaps true, doubleStrikethrough true, ]); $section-addText(I am styled by a font style definition., $fontStyleName); // 使用命名段落样式 $paragraphStyleName pStyle; $phpWord-addParagraphStyle($paragraphStyleName, [ alignment PhpOffice\PhpWord\SimpleType\Jc::CENTER, spaceAfter 100, ]); $section-addText(I am styled by a paragraph style definition., null, $paragraphStyleName); // 同时应用字体与段落样式 $section-addText(I am styled by both font and paragraph style., $fontStyleName, $paragraphStyleName); // 指定语言法语示例 $section-addText(Ce texte-ci est en français., [lang PhpOffice\PhpWord\Style\Language::FR_BE]);可以看到addText的三个参数可以按需省略只传文本时不带任何样式需要字体样式时传第二个参数并把段落样式置为null只设置段落样式时第二个参数传null。在 Text.php 的构造函数中$fontStyle与$paragraphStyle可以是Font/Paragraph样式对象、样式名字符串或样式数组。传入数组时源码会创建对应的样式对象并调用setStyleByArray批量赋值Text.php、Text.php。另外文本内容在存储前会经过SharedText::toUTF8统一转码Text.php因此传入非 UTF-8 编码的中文、法语等文本也能被正确处理。三、addTextRun复杂段落文本当一段文字内部需要混排多种字体样式部分加粗、部分斜体、部分带下划线或需要嵌入链接、图片、公式等其他元素时应使用addTextRun。它返回一个TextRun容器对象之后通过该对象上的一系列add*方法持续追加内容所有追加的元素最终落在同一个段落内由可选的段落样式统一控制布局。官方示例 Sample_04_Textrun.php 给出了完整演示?php $phpWord new PhpOffice\PhpWord\PhpWord(); // 先定义命名样式 $paragraphStyleName pStyle; $phpWord-addParagraphStyle($paragraphStyleName, [spacing 100]); $boldFontStyleName BoldText; $phpWord-addFontStyle($boldFontStyleName, [bold true]); $coloredFontStyleName ColoredText; $phpWord-addFontStyle($coloredFontStyleName, [color FF8080, bgColor FFFFCC]); $linkFontStyleName NLink; $phpWord-addLinkStyle($linkFontStyleName, [ color 0000FF, underline PhpOffice\PhpWord\Style\Font::UNDERLINE_SINGLE, ]); $section $phpWord-addSection(); // 带段落样式的 TextRun内部混排多种字体并嵌入链接与图片 $textrun $section-addTextRun($paragraphStyleName); $textrun-addText(Each textrun can contain native text, link elements or an image.); $textrun-addText( No break is placed after adding an element., $boldFontStyleName); $textrun-addText( Both ); $textrun-addText(superscript, [superScript true]); $textrun-addText( and ); $textrun-addText(subscript, [subScript true]); $textrun-addText( are also available.); $textrun-addText( All elements are placed inside a paragraph with the optionally given paragraph style., $coloredFontStyleName); $textrun-addText( Sample Link: ); $textrun-addLink(https://github.com/PHPOffice/PHPWord, PHPWord on GitHub, $linkFontStyleName); $textrun-addText( Sample Image: ); $textrun-addImage(__DIR__ . /resources/_earth.jpg, [width 18, height 18]);要点每次addText都会生成一个独立的Text元素元素之间不会自动插入换行需要换行时使用addTextBreak。字体样式既可以用命名样式名也可以用内联样式数组如[bold true]后者只影响当前这一个Text元素。TextRun内部还可以追加链接addLink、图片addImage、OLE 对象addObject、脚注addFootnote、表单域addFormField、公式addFormula等丰富元素详见容器类的方法清单AbstractContainer.php。在TextRun内追加纯文本时段落样式参数会被容器内部强制移除AbstractContainer.php因为段落级样式已由addTextRun统一指定避免重复设置。TextRun类本身继承自AbstractContainerTextRun.php其getText()方法会遍历内部所有元素将普通文本与 Ruby 注音文本拼接为纯字符串TextRun.php方便在读取回写或校验时提取段落全文。四、字体样式Font完整选项addText的第二个参数与TextRun内addText的样式参数均支持以下字体属性完整清单出自 docs/usage/styles/font.md样式键说明取值示例allCaps全大写true/falsebgColor文字背景色FF0000十六进制色值bold加粗true/falsecolor文字颜色FF0000doubleStrikethrough双删除线true/falsefgColor文字高亮色yellow、green、blue可取值见\PhpOffice\PhpWord\Style\Font::FGCOLOR_...类常量hint字体内容类型default、eastAsia、csitalic斜体true/falsename字体名称Arial、Times New Romanrtl从右到左语言true/falsesize字号20、22半角点smallCaps小型大写字母true/falsestrikethrough删除线true/falsesubScript下标true/falsesuperScript上标true/falseunderline下划线类型single、dash、dotted等可取值见\PhpOffice\PhpWord\Style\Font::UNDERLINE_...类常量lang语言语言代码如en-US、fr-BE或需设置东亚/双向语言时的Language对象/数组部分语言代码见\PhpOffice\PhpWord\Style\Language类position文字位置提升/降低以半角点为单位hidden隐藏文字true/falsewhiteSpace生成 HTML/PDF 时空白处理方式pre-wrap、normal其他 CSS 值可接受但一般无实际意义fallbackFontHTML/PDF 的通用回退字体sans-serif、serif、monospace其他通用字体系列亦可其中underline与fgColor的合法取值定义在 Font.php 的UNDERLINE_*与FGCOLOR_*类常量中lang的常用语言代码如EN_GB、FR_BE定义在 Language.php。示例 Sample_01_SimpleText.php 对color、bold、italic、underline、strikethrough、superScript、subScript、smallCaps、allCaps、fgColor、spacing、kerning等内联样式均有实际调用可直接参考。提示字体样式也可预先通过$phpWord-addFontStyle(样式名, [...])注册为命名样式然后在addText中直接传样式名复用见 Sample_01_SimpleText.php。五、段落样式Paragraph完整选项addText的第三个参数与addTextRun的参数支持以下段落属性完整清单出自 docs/usage/styles/paragraph.md样式键说明取值/单位alignment对齐方式支持 ECMA-376 第一版至 ISO/IEC 29500:2012 的所有对齐模式见\PhpOffice\PhpWord\SimpleType\Jc类常量如Jc::CENTERbasedOn父样式样式名hanging悬挂缩进半英寸indent左缩进半英寸indentation缩进键值对数组以 twip 为单位支持left、right、firstLine、firstLineChars、hanging类型见\PhpOffice\PhpWord\Style\IndentationkeepLines保持整段在同一页true/falsekeepNext与下一段保持同页true/falselineHeight行高倍数1.0、1.5等next下一段样式样式名pageBreakBefore从新页开始本段true/falsespaceBefore段前间距twipspaceAfter段后间距twipspacing行间距twip当spacingLineRule为auto时基准值 240一行高度会被自动加入如需双倍行距请设为 240spacingLineRule行距规则auto、exact、atLeast见\PhpOffice\PhpWord\SimpleType\LineSpacingRule类常量suppressAutoHyphens段落自动断字true/falsetabs自定义制表位集合制表位数组widowControl允许首/末行单独显示于页面true/falsecontextualSpacing相同样式段落间忽略上下间距true/falsebidi从右到左段落布局true/falseshading段落底纹着色样式textAlignment行内垂直字符对齐见\PhpOffice\PhpWord\SimpleType\TextAlignment类常量对齐取值常量Jc定义于 Jc.php行距规则LineSpacingRule定义于 LineSpacingRule.php垂直对齐TextAlignment定义于 TextAlignment.php。与字体样式一样段落样式既可以在调用处以内联数组给出也可以通过$phpWord-addParagraphStyle()注册为命名样式后引用。六、修订跟踪将文本标记为插入或删除如果要让新增文本在 Word 中体现修订/审阅标记可以将其标记为INSERTED插入或DELETED删除并指定修订作者与时间。原文档 docs/usage/elements/text.md 给出了如下写法?php $text $section-addText(Hello World!); $text-setChanged(\PhpOffice\PhpWord\Element\ChangedElement::TYPE_INSERTED, Fred, (new \DateTime()));需要说明的是当前仓库源码中修订标记的实际 API 位于 AbstractElement.php名为setTrackChange与setChangeInfo修订类型常量定义在 TrackChange.phpTrackChange::INSERTED/TrackChange::DELETED。官方示例 Sample_39_TrackChanges.php 给出了当前推荐的完整写法?php use PhpOffice\PhpWord\Element\TrackChange; $phpWord new PhpOffice\PhpWord\PhpWord(); $section $phpWord-addSection(); $textRun $section-addTextRun(); // 方式一setChangeInfo —— 传入类型、作者、时间 $text $textRun-addText(wake , [bold true]); $text-setChangeInfo(TrackChange::INSERTED, Fred, time() - 1800); // 方式二setTrackChange —— 传入 TrackChange 对象 $text $textRun-addText(up); $text-setTrackChange(new TrackChange(TrackChange::INSERTED, Fred)); // 标记为删除指定作者与更早的时间戳 $text $textRun-addText(go to sleep); $text-setChangeInfo(TrackChange::DELETED, Barney, new DateTime( . (time() - 3600)));setChangeInfo($type, $author, $date)的三个参数中$date既可以是DateTime对象也可以是 Unix 时间戳整数且统一按 UTC 处理AbstractElement.phpTrackChange构造函数对传入的整数时间戳会转换为DateTime( . $date)TrackChange.php。生成文档后被标记的文字在 Word 中会显示为带修订记录的插入或删除内容作者名与时间会出现在审阅窗格中。更多细节可参阅修订功能示例与 docs/usage/elements/trackchanges.md。七、完整可运行示例将以上内容组合为一个完整的脚本即可生成一份同时包含简单文本、混排样式文本与修订标记的 Word 文档?php require_once vendor/autoload.php; use PhpOffice\PhpWord\Element\TrackChange; use PhpOffice\PhpWord\PhpWord; use PhpOffice\PhpWord\SimpleType\Jc; $phpWord new PhpWord(); // 注册命名样式 $phpWord-addFontStyle(titleFont, [bold true, size 22, color 333333]); $phpWord-addParagraphStyle(centerPara, [alignment Jc::CENTER, spaceAfter 240]); $section $phpWord-addSection(); // 简单文本同时应用字体与段落样式 $section-addText(PHPWord Text Guide, titleFont, centerPara); // 复杂段落混排多种字体 $textrun $section-addTextRun([spaceAfter 200]); $textrun-addText(This is ); $textrun-addText(bold, [bold true]); $textrun-addText( and ); $textrun-addText(underlined, [underline single]); $textrun-addText( text in one paragraph.); // 修订标记插入一段文字 $text $section-addText(Newly reviewed content.); $text-setChangeInfo(TrackChange::INSERTED, Reviewer, new \DateTime()); // 写出为 Word 2007 文档 $writer \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, Word2007); $writer-save(text-guide.docx);生成文档后可用 Word 或 LibreOffice 打开验证第一段居中加粗标题、第二段内部混排样式、末段带修订插入标记。若需其他输出格式HTML、ODText、RTF、PDF 等可参阅 docs/usage/writers.md若需从模板克隆行或替换变量可参阅 docs/usage/template.md。小结简单段落选addText混排段落选addTextRun二者的样式参数均可用命名样式名或内联数组具体键值对照 字体样式 与 段落样式。底层由 AbstractContainer.php 统一分派元素创建Text与TextRun元素分别定义在 Text.php 与 TextRun.php。需要审阅修订时使用setChangeInfo()/setTrackChange()配合TrackChange::INSERTED/TrackChange::DELETED标记文字。更多组合用法列表、表格、页眉页脚、脚注等可查阅 docs/usage/containers.md 与 samples 目录下的官方示例。赞分享后端【免费下载链接】PHPWordA pure PHP library for reading and writing word processing documents项目地址https://gitcode.com/gh_mirrors/ph/PHPWord点击查看免费下载相关推荐没有下载按钮的网页视频用这个免费嗅探工具完整存下来没有下载按钮的网页视频用这个免费嗅探工具完整存下来 想把网页上的一集播客存进手机离线听右键另存为只能存下一个网页而播放按钮里藏着一个你拿不到的文件。装后端macOS鼠标增强工具终极指南5分钟让普通鼠标变身苹果触控板平替macOS鼠标增强工具终极指南5分钟让普通鼠标变身苹果触控板平替 滚轮一格一格跳得难受侧键按下去毫无反应中键在3D软件里拖不动视角很多普通鼠标用户在切到后端PHPWord实用技巧文档生成与样式控制指南PHPWord实用技巧文档生成与样式控制指南 PHPWord作为一款强大的PHP文档处理库能够帮助开发者轻松生成和操作Word文档。本文将介绍几个实用技巧后端上一篇用 Metrics Servlets 为 JVM 应用搭建 HTTP 运维端点健康检查、线程转储、指标导出与 CPU Profiling 实战指南下一篇3步开启单机游戏分屏多人模式Nucleus Co-Op完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。