我有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:正在尝试获取非对象的属性
以前有人成功解决过这些错误吗?如果你需要更多的代码,请告诉我。非常感谢。
我也面临同样的问题。我已经按照下面的代码修复了它。
$doc = new DOMDocument();
$doc->loadHTML($str);
$doc->saveHTML();
'PhpOffice'PhpWord'Shared'Html::addHtml($section, $doc->saveHtml(),true);
方法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片段。