我有3个用HTML编写的Blade文件,我目前正在使用WKHTMLTOPDF将它们导出为PDF格式,我现在想将相同的HTML文件导出到Word文档。
到目前为止,我能找到的最好的Laravel包是PhpWord。
代码片段:
<div class="page-break"></div>
<h3>Introduction</h3>
<p></p>
<p></p>
到目前为止我的代码:
$phpWord = new \PhpOffice\PhpWord\PhpWord();
$section = $phpWord->addSection();
$report = view('reports.audit-report', $data)->render();
\PhpOffice\PhpWord\Shared\Html::addHtml($section, $report, true);
$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
$objWriter->save('helloWorld.docx');
目前正在返回此错误:
DOMDocument :: loadXML():打开和结束标记不匹配:链接第1行 和实体中的div,行:1
令人讨厌的是,无论我删除哪一行,该错误始终存在,直到我删除HTML的每一行!
我可以使用以下代码阻止此错误发生:
libxml_use_internal_errors(true);
然而,它返回:
Html.php第136行中的ErrorException:尝试获取非对象的属性
以前是否有人成功解决了这些错误?如果您需要更多代码,请告诉我们。非常感谢。
答案 0 :(得分:0)
方法addHtml()
将提供的字符串加载为XML。这意味着它也需要是有效的XML。换句话说,你将不得不使用XHTML。
错误消息显示第1行中有link
标记。link
是(X)HTML中的空元素。保存为HTML,它将如下所示:
<link rel="stylesheet" type="text/css" href="style.css">
<div>Some Content</div>
由于两个原因,这不是有效的XML。这里没有根元素,但这是由addHtml()
添加的,link
元素未关闭,从而触发错误。
有效的XHTML片段如下所示:
<link rel="stylesheet" type="text/css" href="style.css"></link>
<div>Some Content</div>
或者这个:
<link rel="stylesheet" type="text/css" href="style.css"/>
<div>Some Content</div>
在XML中,空标记可以写为<link></link>
或<link/>
。 /
之前的>
直接关闭了开始标记。只是开头标记在XML / XHTML中无效,但在HTML中有效。
因此,您需要确保您的Blade文件是有效的XHTML片段。
答案 1 :(得分:0)
我遇到了同样的问题。我已将其修改为以下编码。
$doc = new DOMDocument();
$doc->loadHTML($str);
$doc->saveHTML();
\PhpOffice\PhpWord\Shared\Html::addHtml($section, $doc->saveHtml(),true);