PHPWord 1.4 中 firstLine 首行缩进为什么不生效?
数据小许
结论
这段 indentation 配置本身没有明显问题。PHPWord 仓库有一条尚未关闭的缺陷报告,反馈称在 1.4.0 中使用 ['indentation' => ['firstLine' => 400]] 没有效果。维护者回复提到,结果可能受输出格式影响,并展示了 RTFWriter 能生成首行缩进。建议先确认实际使用的 Writer,并检查生成文件中的段落属性,以判断问题出在 PHPWord 写入过程还是文档查看端。PHPWord 缺陷报告
排查生成的 DOCX
你提供的代码通过 addText() 传入段落样式,其中 firstLine 的值为 400。PHPWord 默认使用 twip 作为缩进单位,400 twip 等于 20 pt。PHPWord Settings
先用 Word2007 Writer 保存文件,再复制一份 .docx 并解压。检查 word/document.xml 中对应段落的属性,确认是否包含类似内容:
<w:ind w:firstLine="400"/>
如果没有该属性,缩进就没有写入 DOCX。如果属性存在,但显示效果仍不符合预期,可以检查文档应用的段落样式,以及打开文件的软件是否覆盖了直接格式。
可尝试的处理方式
- 确认 Writer 和保存格式。如果输出不是 DOCX,可根据实际 Writer 检查对应的缩进输出。缺陷报告展示了 RTFWriter 生成
\fi400的例子,但这不能证明 Word2007 Writer 在 PHPWord 1.4 中也能正常工作。缺陷报告中的 Writer 讨论 - 评估是否临时使用 PHPWord 1.3.0。缺陷报告中的用户留言称该版本可用。可以先在项目副本中生成并检查文件,再决定是否采用这一临时方案。
- 如果按字符缩进也符合需求,可以暂时使用
firstLineChars。你提到该属性可用,但它与按 twip 指定的firstLine设置不同,不能直接视为等价替换。
现有资料无法确认 PHPWord 1.4 中 firstLine 失效的具体原因,也无法确认哪个版本修复了此问题。可以保留现有样式写法,并根据生成文件中的缩进属性和实际 Writer 输出判断问题所在。
备注:内容仅供参考。
