【问题标题】:How I can convert a blade content into PDF?如何将刀片内容转换为 PDF?
【发布时间】:2021-03-29 23:27:58
【问题描述】:
在我的 laravel 项目中,我有以下 myview.blade.php 内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{ __('menu.title') }}</title>
</head>
<body>
{{__('content') }}
</body>
但我不想将其呈现为 http 响应,而是希望能够从中生成一个 pdf 文件。你知道我该怎么做吗?
【问题讨论】:
标签:
php
laravel-blade
laravel-5.7
【解决方案1】:
您将需要使用 HTML 到 PDF 库(例如 DOMPDF)来进行 HTML 的实际转换 -> PDF
https://github.com/dompdf/dompdf
要从刀片视图中获取 HTML,您可以:
$html = view('path/to/view', ['vars' => 'hello'])->render();
【解决方案2】:
我使用了很多解决方案,包括 DOMPDF,但平均而言,WKHTMLTOPDF 生成的输出比 DOMPDF 好得多。
WKHTMLTOPDF 更精确地遵循 CSS 规则。
好吧,wkhtmltopdf 是一个命令行程序,它接受一个 html 文件作为参数,所以你只需要安装它就可以开始使用了。它有适用于 Linux 和 Windows 的软件包。
到代码
从您的视图中生成所需的 html,如下所示:
$html = view('my_view', $arr);
将 HTML 写入临时文件:
$temp_file = tempnam(sys_get_temp_dir(), 'pdf_');
file_put_contents($temp_file, $html);
在 wkhtmltopdf 上运行 exec():
$pdf_file = $temp_file . '.pdf';
exec('wkhtmltopdf ' . $temp_file . ' ' . $pdf_file);
下载您的$pdf_file。
要开心。