如何在文本运行中添加文本中断或转到下一行/行?我试着在文本运行中只做$section->addTextBreak(2);
,但它只是在文本运行后将断点添加到该部分。我也试过$textrun->addTextBreak(2);
,但它给了我一个致命的错误。任何回复都将不胜感激。
答案 0 :(得分:7)
问题在3年前被问到,但我遇到了同样的问题,我找到了解决方案。也许这可以帮助PHPWord的新用户。
要在Word文档中添加crlf,标记可以提供帮助:
$section->addText('Some text <w:br/> another text in the line ');
我在这里找到了解决方案:http://jeroen.is/phpword-line-breaks/
答案 1 :(得分:6)
我担心目前的版本无法做到这一点。我对这个库没有深刻的理解,但是通过查看代码,我发现textRun
类只包含addText
和addLink
方法。
但是我也需要这个功能以及其他几个,所以我将自己编写并创建一个pull请求,以便将它包含在下一个版本中(如果有的话)。
基本上可以通过修改textRun
类,添加addLineBreak
方法(与节类中的方法类似)然后修改类Base.php
来创建适当的元素来完成在最后文件中。
在Docx xml中,这些线制动器类似于html br
标签,但必须关闭以前的文本并在使用break之后重新打开,如下所示:
<w:r>
<w:t>This is</w:t>
<w:br/>
<w:t xml:space="preserve"> a simple sentence.</w:t>
</w:r>
而不是简单地做
<w:r>
<w:t>This is<w:br /> a simple sentence</w:t>
</w:r>
因此,在base.php
中,您需要编辑行为以创建此代码块。
希望这很有用!
修改
我已经发现实现这一点非常简单。在textRun.php
中添加此方法:
/**
* Add a TextBreak Element
*
* @param int $count
*/
public function addTextBreak($count = 1) {
for($i=1; $i<=$count; $i++) {
$this->_elementCollection[] = new PHPWord_Section_TextBreak();
}
}
并在此方法结尾的Base.php
方法的_writeTextRun
中添加以下条件:
elseif($element instanceof PHPWord_Section_TextBreak) {
$objWriter->writeElement('w:br');
}
答案 2 :(得分:1)
在phpword中添加换行符让我感到困扰,我终于找到了解决方案,所以这里是: 这证明了案文的合理性。
$PHPWord->addParagraphStyle('pJustify', array('align' => 'both', 'spaceBefore' => 0, 'spaceAfter' => 0, 'spacing' => 0));
//add this style then append it to text below
$section->addText('something', 'textstyle', 'pJustify');
//the text behind this will be justified and will be in a new line, not in a new paragraph
$section->addText('behind', 'textstyle', 'pJustify');
这将输出:
东西
后面
答案 3 :(得分:1)
我不知道接受的答案中的PR是否已合并,或者事实上在2013年是否已经可行,但无论如何,自2015年以来,如果不是更早,则表明在段落中插入换行符的正确方法在initial response to #553 on GitHub:
TextRun
; TextRun
的{{1}}方法 addTextBreak()
本身 即可。这是一个函数,它将处理包含文字换行符的字符串中的完整文本段落(CR-LF [TextRun
],LF ["\r\n"
]或CR ["\n"
]):
"\r"
PHPWord(0.14.0)当前在读取Word2007文档时丢弃换行符 - 希望在1.0之前修复 - 但在Word中打开时,上述输出是正确的。
答案 4 :(得分:0)
这很简单:只需启动一个新的textrun,然后再将textbreak添加到该部分,就像这样(使用docx格式测试):
$textrun = $section->addTextRun();
$textrun->addText('blah-blah', 'p_bold');
$section->addTextBreak(2);
$textrun = $section->addTextRun();
$textrun->addText('blah-blah-blah in new line ', 'p');
$textrun->addText('blah-blah', 'p_bold');
$textrun->addText('blah-blah', 'p');
$section->addTextBreak(2);
$textrun = $section->addTextRun();
$textrun->addText('blahblah', 'p');
答案 5 :(得分:0)
为了正确工作,您需要添加一个文本块:
$string = strtr($string, [
"\n" => "</w:t>\n<w:br />\n<w:t xml:space=\"preserve\">"
]);
答案 6 :(得分:0)
您可以输入文本,并在要换行的地方添加\n
,然后执行其余操作:
$text = "foo\nbar\nfoobar";
$textlines = explode("\n", $text);
$textrun = $section->addTextRun();
$textrun->addText(array_shift($textlines));
foreach($textlines as $line) {
$textrun->addTextBreak();
// maybe twice if you want to seperate the text
// $textrun->addTextBreak(2);
$textrun->addText($line);
}
答案 7 :(得分:0)
使用PHP_EOL进行换行,这是PHPWord中唯一的换行解决方案
答案 8 :(得分:0)
试试这个:
str_replace("\n", '</w:t><w:br/><w:t xml:space="preserve">', $yourData );
或者这个
str_replace("\r\n", '</w:t><w:br/><w:t xml:space="preserve">', $yourData );