【问题标题】:Passing blade layout to phpword将刀片布局传递给 phpword
【发布时间】:2019-10-03 01:41:53
【问题描述】:

我正在使用 Laravel 和 phpword。所以在这里我想将html布局从刀片文件导出到word。 但是当我尝试创建它时,出现的错误: DOMDocument::loadXML(): Opening and ending tag mismatch: link line 1 and head in Entity, line: 1
我的代码:

$content = view('docs.index')->render();

$dom = new DOMDocument();
$dom->loadHTML($content);
$dom->saveHTML();

$phpWord = new PhpWord();
Html::addHtml($phpWord->addSection(), $dom->saveHTML(), true);
$objWriter = IOFactory::createWriter($phpWord, 'Word2007');
$objWriter->save('doc_index_'.Carbon::now()->format('d-m-y h-i').'.docx');

return view('papers.show')->with('success');

这是我的刀片文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Doc HTML</title>
    <meta charset="utf-8">
    <link rel="stylesheet" href="/bootstrap/css/bootstrap.min.css" />
</head>
<body>
<div>
    <p>
        Laravel is a web application framework with expressive, elegant syntax. <br />
        We believe development must be an enjoyable and creative experience to be truly fulfilling. <br />
        Laravel takes the pain out of development by easing common tasks used in many web projects. <br />
    </p>
</div>
</body>
</html>

打印我的 $content 变量:

"""
<!DOCTYPE html>
<html lang="en">
<head>
    <title>Doc HTML</title>
    <meta charset="utf-8" />
    <link rel="stylesheet" href="/bootstrap/css/bootstrap.min.css" />
</head>
<body>
<div>
    <p>
        Laravel is a web application framework with expressive, elegant syntax. <br />
        We believe development must be an enjoyable and creative experience to be truly fulfilling. <br />
        Laravel takes the pain out of development by easing common tasks used in many web projects. <br />
    </p>
</div>
</body>
</html>

"""

【问题讨论】:

  • 您的刀片文件中某处的标记似乎有错误。
  • @jfadich 我通过添加刀片文件编辑了我的问题
  • 你能回显 $content 吗?
  • @AhmedAboud 是的,你现在可以看到了

标签: php html xml laravel phpword


【解决方案1】:

我遇到了完全相同的问题,并通过以下工作解决了

$phpWord = new \PhpOffice\PhpWord\PhpWord();
$section = $phpWord->addSection();

header("Content-type: application/vnd.ms-word");
header("Content-Disposition: attachment;Filename=".rand().".doc"); 
header("Pragma: no-cache"); header("Expires: 0");

然后简单地渲染您的视图。 例如返回视图('view_name');

【讨论】:

  • 我什至不知道为什么需要 PHP 库。使用您的解决方案,通过添加这些标题并返回刀片视图,只需下载 doc 文件。
【解决方案2】:

模板开头的&lt;!DOCTYPE html&gt; 部分导致了该错误。关于读取样式文件,从上面讨论PHPWord/Html.php 中提供的函数详细信息的链接,您可以看到 addHtml 将仅使用 body 标记的内容而忽略其他所有内容。

关于上述讨论中的另一个问题,我认为 PHPWord 不支持从 css 文件中包含任何类型的样式 - 在这个特定示例中,我不确定应用引导响应样式的预期结果是什么到word文档内容。

【讨论】:

    【解决方案3】:

    您的&lt;meta&gt; 标签在技术上并未关闭。要遵循省略结束标记的元素的规范,它们必须以/&gt; 为后缀。所以你有&lt;br /&gt;&lt;link ... /&gt;你的元标签应该是&lt;meta ... /&gt;

    【讨论】:

    • 我也这样做了,仍然显示错误:DOMDocument::loadXML(): Opening and ending tag mismatch: link line 1 and head in Entity, line: 1
    猜你喜欢
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 2022-01-01
    • 2022-11-11
    相关资源
    最近更新 更多