我们正在使用phpword生成word文档。 我们目前的情况如下: 如果我们使用addText()所有换行符,选项卡等在Open Office中工作(与源xml文件中的相同),但在MS Word中不起作用。 (在SO中有一些关于这个的问题,所以我们去了textRun ...) 如果我们使用addTextRun()和addTextBreak(),则换行符,制表符等 在MS Word中显示...但不在OpenOffice中... 我们正在生成Word2007文档
令人失望....我们做了很多测试,结果都相同。
这是一个已知问题吗? 在msword或开放式办公室打开文档时,有没有人有解决方案可以显示“相同/相似”?
以下是有关此问题的更多信息: 我们生成一个文件,并在MS Word和Open Office上打开它
Here is what you see in MS Word
Here is what you see in OpenOffice or LibreOffice
正如您所看到的,使用换行符进行文本和文本运行的行为取决于您用于打开文档的套件。
我们想要实现的是根据从数据库中检索的内容创建报告。此内容可能包含换行符,标签等。
根据要求,这是我们的一些代码。我们创建一个包装器来处理phpword对象,这里是我们代码的相关部分;
$this->phpWord = new PhpWord();
function setSectionFromXmlNode($sectionNode, $format = null) {
$section = $this->phpWord->addSection($format);
foreach ($sectionNode->text as $textNode) {
$format = $this->getTextFormatFromXmlNode($textNode);
$section->addText($textNode, $format);
}
foreach ($sectionNode->{'text-run'} as $textRunNode) {
$format = $this->getTextFormatFromXmlNode($textRunNode);
$textChunk = $textRunNode->__toString();
$textlines = preg_split("/\\r\\n|\\r|\\n/", $textChunk);
$textrun = $section->addTextRun();
$textrun->addText(array_shift($textlines),$format);
foreach($textlines as $line) {
$textrun->addTextBreak();
$textrun->addText($line,$format);
}
}
}
这是xml
<document>
<section>
<text>This is a new section.
Spaces, tabs, and linebreaks should be preserved</text>
<text>
one
two
three lines
</text>
<text-run>
one
two
three lines
</text-run>
</section>
</document>
我们收到了phpWord支持者的回复。 这是https:// github.com/PHPOffice/PHPWord/issues/1132#issuecomment-335580096的链接,解释了我们注意到套件之间的段落之间的区别。