我正在使用PhpWord创建一个包含注解的文档。我可以成功创建文件,但当我尝试打开它时,Word报告它包含不可读的内容。虽然Word将继续打开文件,并且注解似乎在正确的位置,但我仍然希望找到一个优雅的解决方案,以防止Word显示警告。
我将.docx文件重命名为.zip,发现该包包含2个comments.xml文件。
这两个文件是相同的,除了一个包含注解的id,而另一个不包含。
下面是代码。如果我不包括评论,它工作得很好。有什么建议吗?
<?php
ob_start(); // output buffering is turned on
require_once('bootstrap.php');
// Creating the new document...
$phpWord = new \PhpOffice\PhpWord\PhpWord();
$phpWord->getCompatibility()->setOoxmlVersion(15);
// Adding an empty Section to the document...
$section1 = $phpWord->addSection();
// A comment
$comment = new \PhpOffice\PhpWord\Element\Comment('Authors name');
$comment->addText('Test comment', ['bold' => true]);
$phpWord->addComment($comment);
$textrun = $section1->addTextRun();
$textrun->addText('This ');
$text = $textrun->addText('is');
$text->setCommentRangeStart($comment);
$textrun->addText(' a test');
ob_clean();
$temp_file = tempnam(sys_get_temp_dir(), 'PHPWord');
\PhpOffice\PhpWord\Settings::setZipClass(\PhpOffice\PhpWord\Settings::PCLZIP);
// Saving the document as OOXML file...
$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
$objWriter->save($temp_file);
header("Content-Description: File Transfer");
header('Content-Disposition: attachment; filename="duplicates.docx"');
header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
readfile($temp_file);
file_get_contents($temp_file);
?>
1条答案
按热度按时间uhry853o1#
我可以通过注解PHPWord/src/PhpWord/Writer/Word2007.php中的第271行来解决这个问题。但是,我是面向对象编程的新手,所以这可能不是一个好的解决方案。