Как добавить разрыв текста или перейти к следующей строке/строке во время текстового прогона? Я попытался сделать только $section->addTextBreak(2);
, но в текстовом режиме, но он просто добавил разрывы в раздел после запуска текста. Я также попробовал $textrun->addTextBreak(2);
, но это дало мне роковую ошибку. Любые ответы будут высоко оценены.PHPWord, как добавить разрыв текста/новую строку во время текстового прогона
ответ
Боюсь, что с текущей версией это будет невозможно. У меня нет глубокого понимания этой библиотеки, но, глядя на код, я узнал, что класс textRun
состоит только из addText
и addLink
методов.
Но мне также нужна эта функция вместе с несколькими другими, поэтому я собираюсь написать ее сам и создать запрос на перенос, чтобы включить его в следующую версию (если она будет).
В принципе это может быть сделано путем изменений textRun
класса, добавляя addLineBreak
метод (аналогично тому, как это в классе раздела), а затем изменить класс Base.php
, чтобы создать соответствующие элементы в окончательном документе.
В Docx XML, эти линии тормоза похожи на HTML br
тега, но предыдущий текст должен быть закрыт и вновь открыт после использования перерыва, как это:
<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
вам необходимо изменить поведение, чтобы создать этот блок кода.
Надеюсь, это было полезно!
EDIT
Я понял, что реализация этого очень проста. В 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');
}
Добавление новой строки в phpword надоело, и я finnaly найденное решение, случайно, так вот оно: И это оправдывает текст.
$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-х лет назад, но у меня такая же проблема, и я нашел решение. Возможно, это может помочь новым пользователям PHPWord.
Для добавления CRLF в документе Word, тег может помочь:
$section->addText('Some text <w:br/> another text in the line ');
Я нашел решение здесь: http://jeroen.is/phpword-line-breaks/
Это легко: просто начать новую 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');
также полезно: https://github.com/PHPOffice/PHPWord/вопросы/958 # issuecomment-318913636 – vorvor
Я немного смущен, где я помещаю код в Base.php. В конце которого фигурная скобка? В самом конце теста есть 2 теста. Также как вы добавите перерыв после добавления этого кода в библиотеку? – user2579723
О, неважно, что у меня это работает. Спасибо за помощь, вы не знаете, сколько времени вы спасли меня! – user2579723
@ user2579723 Я рад, что это вам помогло! – j0hny