PHPWord how to add text break / new line while in a text run

format, line, php, phpword

Solution

I'm afraid that this will not be possible with current version. I don't have deep understanding of this library, but from looking at the code, I found out that the `textRun` class consist only of `addText` and `addLink` methods.

But I also need this feature along with several others, so I'm going to write it myself and create a pull request to get it included in the next release (if there will be any).

Basically it can be done by modifying the `textRun` class, adding an `addLineBreak` method (similar way as it is in the section class) and then modify class `Base.php` to create proper elements in final document.

In Docx xml, those line brakes are similar to the html `br` tag, but previous text must be closed and reopened after using break like this:

<w:r>
  <w:t>This is</w:t>
  <w:br/>
  <w:t xml:space="preserve"> a simple sentence.</w:t>
</w:r>

instead of simply doing

<w:r>
  <w:t>This is<w:br /> a simple sentence</w:t>
</w:r>

So in `base.php`, you'll need to edit behavior to create this block of code.

Hope this was useful!

EDIT

I have figured out that implementing this is very simple. In `textRun.php` just add this method:

/**
* Add a TextBreak Element
*
* @param int $count
*/
public function addTextBreak($count = 1) {
    for($i=1; $i<=$count; $i++) {
        $this->_elementCollection[] = new PHPWord_Section_TextBreak();
    }
}

and in `Base.php` in the `_writeTextRun` method at the end of this method add this condition:

elseif($element instanceof PHPWord_Section_TextBreak) {
    $objWriter->writeElement('w:br');
}

Problem

How can I add a text break or go to the next line/row while in a text run? I tried to just do `$section->addTextBreak(2);` while in the text run but it just added the breaks to the section after the text run. I also tried `$textrun->addTextBreak(2);` but it gave me a fatal error. Any responses would be greatly appreciated.

Original source