PhpWord 输出换行符回车符

PhpWord textarea换行处理

前言

php小白,若有错误欢迎指正。

之前的项目中有涉及到PhpWord生成,其中获取textarea数据时发现字符串中的换行\n生成docx后不起作用,上网查了之后发现一些答案说使用<w:br/>替换\n就可以换行了。

但实际使用的时候发现,<w:br/>是软回车,软回车实际上并不是真正的回车,无法解决段落首行缩进的问题。

如图所示:
在这里插入图片描述
为解决首行缩进2个中文字符,我选择在替换的<w:br/>后添加空格或空格符代码,但若使用WPS打开docx,WPS会自动把一个段落中的空格吞掉,还是无法解决首行缩进。

而docx中,回车分软回车和硬回车两种,我想要的是硬回车,也就是真正另外回车生成为一个新的段落且设置首行缩进。

在网上没有找到PhpWord生成硬回车的答案,于是去研究docx的硬回车代码。

实际上docx的硬回车跟xml文件有关系,将docx后缀改为zip,解压后进入word文件夹,打开document.xml文件,这个文件是文档的实际内容代码,可以看到像html一样,每个段落文本是由标签包起来的,具体的标签可以去查xml的标签样式。

软回车

生成软回车,可以使用str_replace方法将\n替换为<w:br/>

str_replace("\n","<w:br/>", 要替换的字符串);

硬回车

生成硬回车,可以使用str_replace方法将\n替换为你模板中对应的样式标签代码。

// 数据换行处理
$docx_p_start = '<w:p>
	<w:pPr>
	<w:spacing w:line="360" w:lineRule="auto"/>
	<w:ind w:firstLine="480" w:firstLineChars="200"/>
	</w:pPr>
	<w:r>
	<w:rPr><w:rFonts w:hint="eastAsia"/></w:rPr>
	<w:t>';
$docx_p_end = '</w:t></w:r></w:p>';
$replace = str_replace("\n", $docx_p_end.$docx_p_start, $replace);
  • <w:p></w:p>:段落标签;
  • <w:pPr></w:pPr>:段落属性包在<w:pPr></w:pPr>中;
  • <w:spacing w:line=“360” w:lineRule=“auto”/>
    <w:ind w:firstLine=“480” w:firstLineChars=“200”/>: 设置段落首行缩进;
  • <w:r></w:r>:表示一个样式串,包在<w:rPr></w:rPr>的外边;
  • <w:rPr><w:rFonts w:hint=“eastAsia”/></w:rPr>:设置段落的字体样式。
  • <w:t></w:t>:字符串标签,段落内容就包在这个标签里。

替换方法就是,将docx_p_end字符串对应上模板里变量的段落开始标签<w:p>等,然后在docx_p_end字符串后拼接上docx_p_start字符串。

需要注意的是,docx_p_start字符串并不是固定的,你要根据你想要的段落样式进行对应的修改。

具体怎么修改可以参考WORDXML格式解析,也可以创建一个docx后,写一段话,设置你想要的段落样式后,将文件改为zip文件解压后查看document.xml文件内对应段落的样式代码,然后复制样式代码。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值