TextRun 中的 PHPWord LineBreak 不起作用
PHPWord LineBreak in TextRun not working
我从一位年长的 Stack Over Flow Question 那里得到了建议,但我在使用它时遇到了问题。我在他们描述的地方添加了方法,但生成的 word 文件没有换行符(在解压缩后通过目测和检查 docx 文件)。没有错误,所以该方法似乎在做一些不是我想要的事情。我这样做是因为我需要 \n
个字符,我确实使用 PHPRtfText 使它工作正常但存在兼容性问题并且它似乎作为 Word2007 文件工作得更好所以我相应地转换了代码。虽然,也许我把它放错了地方,但这是修改后的功能:
/lib/PHPWord/Writer/Word2007/Base.php:
protected function _writeTextRun(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_TextRun $textrun)
{
$elements = $textrun->getElements();
$styleParagraph = $textrun->getParagraphStyle();
$SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false;
$objWriter->startElement('w:p');
if($SpIsObject)
{
$this->_writeParagraphStyle($objWriter, $styleParagraph);
}
elseif(!$SpIsObject && !is_null($styleParagraph))
{
$objWriter->startElement('w:pPr');
$objWriter->startElement('w:pStyle');
$objWriter->writeAttribute('w:val', $styleParagraph);
$objWriter->endElement();
$objWriter->endElement();
}
if(count($elements) > 0)
{
foreach($elements as $element)
{
if($element instanceof PHPWord_Section_Text)
{
$this->_writeText($objWriter, $element, true);
}
elseif($element instanceof PHPWord_Section_Link)
{
$this->_writeLink($objWriter, $element, true);
}
}
}
elseif($element instanceof PHPWord_Section_TextBreak)
{
$objWriter->writeElement('w:br');
}
$objWriter->endElement();
}
我通过以下方式调用它:
test1.php:
$PHPWord = new PHPWord();;
$PHPWord->setDefaultFontName('Calibri');
$PHPWord->setDefaultFontSize(11);
$section = $PHPWord->createSection();
$textrun = $section->createTextRun();
$textrun->addText( "---------------");
$textrun->addTextBreak();
$textrun->addText( "$name", array('bold'=>true ) );
最后在 /lib/PHPWord/Section/TextRun.php:
public function addTextBreak($count = 1)
{
for($i=1; $i<=$count; $i++)
{
$this->_elementCollection[] = new PHPWord_Section_TextBreak();
}
}
还有什么我可以补充的吗?我真的需要它来工作,不能再次将 class 更改为其他内容。
我正在大量格式化文本,因此是 textrun,但我需要在每一行之后添加 \n
而不是一个部分,因为它需要是同一段落,所以 \n\n
是行不通的接受这项努力。
我确实认为我试过了,但也许我没有将它保存在网络服务器上,但将 elseif 移到更高的 elseif 块中就成功了。
if(count($elements) > 0)
{
foreach($elements as $element)
{
if($element instanceof PHPWord_Section_Text)
{
$this->_writeText($objWriter, $element, true);
}
elseif($element instanceof PHPWord_Section_Link)
{
$this->_writeLink($objWriter, $element, true);
}
elseif($element instanceof PHPWord_Section_TextBreak)
{
$objWriter->writeElement('w:br');
}
}
}
$objWriter->endElement();
}
我从一位年长的 Stack Over Flow Question 那里得到了建议,但我在使用它时遇到了问题。我在他们描述的地方添加了方法,但生成的 word 文件没有换行符(在解压缩后通过目测和检查 docx 文件)。没有错误,所以该方法似乎在做一些不是我想要的事情。我这样做是因为我需要 \n
个字符,我确实使用 PHPRtfText 使它工作正常但存在兼容性问题并且它似乎作为 Word2007 文件工作得更好所以我相应地转换了代码。虽然,也许我把它放错了地方,但这是修改后的功能:
/lib/PHPWord/Writer/Word2007/Base.php:
protected function _writeTextRun(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_TextRun $textrun)
{
$elements = $textrun->getElements();
$styleParagraph = $textrun->getParagraphStyle();
$SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false;
$objWriter->startElement('w:p');
if($SpIsObject)
{
$this->_writeParagraphStyle($objWriter, $styleParagraph);
}
elseif(!$SpIsObject && !is_null($styleParagraph))
{
$objWriter->startElement('w:pPr');
$objWriter->startElement('w:pStyle');
$objWriter->writeAttribute('w:val', $styleParagraph);
$objWriter->endElement();
$objWriter->endElement();
}
if(count($elements) > 0)
{
foreach($elements as $element)
{
if($element instanceof PHPWord_Section_Text)
{
$this->_writeText($objWriter, $element, true);
}
elseif($element instanceof PHPWord_Section_Link)
{
$this->_writeLink($objWriter, $element, true);
}
}
}
elseif($element instanceof PHPWord_Section_TextBreak)
{
$objWriter->writeElement('w:br');
}
$objWriter->endElement();
}
我通过以下方式调用它:
test1.php:
$PHPWord = new PHPWord();;
$PHPWord->setDefaultFontName('Calibri');
$PHPWord->setDefaultFontSize(11);
$section = $PHPWord->createSection();
$textrun = $section->createTextRun();
$textrun->addText( "---------------");
$textrun->addTextBreak();
$textrun->addText( "$name", array('bold'=>true ) );
最后在 /lib/PHPWord/Section/TextRun.php:
public function addTextBreak($count = 1)
{
for($i=1; $i<=$count; $i++)
{
$this->_elementCollection[] = new PHPWord_Section_TextBreak();
}
}
还有什么我可以补充的吗?我真的需要它来工作,不能再次将 class 更改为其他内容。
我正在大量格式化文本,因此是 textrun,但我需要在每一行之后添加 \n
而不是一个部分,因为它需要是同一段落,所以 \n\n
是行不通的接受这项努力。
我确实认为我试过了,但也许我没有将它保存在网络服务器上,但将 elseif 移到更高的 elseif 块中就成功了。
if(count($elements) > 0)
{
foreach($elements as $element)
{
if($element instanceof PHPWord_Section_Text)
{
$this->_writeText($objWriter, $element, true);
}
elseif($element instanceof PHPWord_Section_Link)
{
$this->_writeLink($objWriter, $element, true);
}
elseif($element instanceof PHPWord_Section_TextBreak)
{
$objWriter->writeElement('w:br');
}
}
}
$objWriter->endElement();
}