当前位置: 首页 > 知识库问答 >
问题:

文本运行中的PHPWord换行不工作

苍元章
2023-03-14

我从一个较旧的堆栈溢出问题中找到了建议,但我在让它工作时遇到了问题。我在它们描述的地方添加了方法,但生成的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();
}

我引用它的方式是:

测试1。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();
    }
}

还有什么我可以帮忙的吗?我真的需要这个来工作,不能再把课程改成别的。

我大量格式化的文本,因此文本,但我需要的\n后每行不是一个部分,因为它需要是相同的段落,所以有\n\n将是不可接受的这种努力...

共有1个答案

邵奇
2023-03-14

我肯定想我试过了,但也许我没有将它保存在Web服务器上,但将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();
}
 类似资料:
  • 如何在文本运行时添加文本分隔符或转到下一行/行?我试着只做

  • 有人有使用PHPWord的经验吗?我使用Composer安装了它,就像我对许多其他模块所做的一样,但是当我运行“基本用法”示例时,什么都没有发生。(autoloader.php工作正常)。 如果我更改

  • 我无法让和在中工作。 如果我没有在段落样式中包含或,那么该节前后将有一些空间。 如果我确实包含或,那么无论我为间距输入了什么,空格都将变为0。 我可以同时使用其他段落样式,例如,。 例子:

  • 如果单元格内文本包含 \n ,将处理换行样式。 $format = new \Vtiful\Kernel\Format($fileHandle); $wrapStyle = $format->wrap()->toResource();

  • 我在1-2年前用libGDX做了一个游戏,我可以在eclipse上运行它,它很有效。当我想导出jar文件时,我转到Export-Runnable jar file-这里我选择package required libraries并导出它。

  • 问题内容: 如何替换在文本文件中找到的一行文本? 我有一个字符串,例如: 我想用更新它: (反之亦然) 我该如何完成? 顺便说一句,我只想替换已读取的行。不是整个文件。 问题答案: 在底部,我有一个通用的解决方案来替换文件中的行。但是首先,这是眼前特定问题的答案。辅助功能: 然后调用它: 原始文本文件内容: Output: New text file content: And as a note,