2013-07-17 6 views
4

Как добавить разрыв текста или перейти к следующей строке/строке во время текстового прогона? Я попытался сделать только $section->addTextBreak(2);, но в текстовом режиме, но он просто добавил разрывы в раздел после запуска текста. Я также попробовал $textrun->addTextBreak(2);, но это дало мне роковую ошибку. Любые ответы будут высоко оценены.PHPWord, как добавить разрыв текста/новую строку во время текстового прогона

ответ

3

Боюсь, что с текущей версией это будет невозможно. У меня нет глубокого понимания этой библиотеки, но, глядя на код, я узнал, что класс 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'); 
} 
+0

Я немного смущен, где я помещаю код в Base.php. В конце которого фигурная скобка? В самом конце теста есть 2 теста. Также как вы добавите перерыв после добавления этого кода в библиотеку? – user2579723

+1

О, неважно, что у меня это работает. Спасибо за помощь, вы не знаете, сколько времени вы спасли меня! – user2579723

+0

@ user2579723 Я рад, что это вам помогло! – j0hny

1

Добавление новой строки в 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'); 

Этот выход будет:

что-то

за

5

Вопрос был задан 3-х лет назад, но у меня такая же проблема, и я нашел решение. Возможно, это может помочь новым пользователям PHPWord.

Для добавления CRLF в документе Word, тег может помочь:

$section->addText('Some text <w:br/> another text in the line '); 

Я нашел решение здесь: http://jeroen.is/phpword-line-breaks/

-1

Это легко: просто начать новую 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'); 
+0

также полезно: https://github.com/PHPOffice/PHPWord/вопросы/958 # issuecomment-318913636 – vorvor