我有一个PHP变量,它包含纯文本,我需要使用OpenTBS将其插入到MS Word模板中。
我的Word占位符是:
[onshow.introduction]
问题是我使用对齐格式,所以我需要实际的"对齐";新段落";即";回车";(在Word中输入(。相反,我所有的换行符都被翻译成";新行";(shift-Enter(,打乱了我的格式。
我尝试插入
、\r\n、\r\n、\n\r、PHP_EOL-所有这些都只是在MS Word中创建换行符,而不是新的段落字符。
有什么办法可以得到";新段落";OpenTBS中Word中的字符?
在Ms Word中,新段落是一个复杂的XML实体。类似于:
<w:p><w:r><w:t>My paragraph</w:t></w:r></w:p>
并且它可以具有额外的属性和额外的子实体,这些子实体可以出现在多个地方。
因此,用</w:t></w:r><w:r><w:t>
替换断线是非常敏感和危险的。
最好且稳健的解决方案是将文本分解为几个部分,并将其合并到一个以Ms-Word段落为边界的块上。
示例:
PHP:
// uniformize line breaks
$introduction = str_replace("n", "r", $introduction);
$introduction = str_replace("rr", "r", $introduction);
// explode in several parts
$introduction = explode("r", $introduction);
// merge on a block
$TBS->MergeBlock('intro', $introduction);
DOCX:
[intro.val;block=tbs:p]