barryvdh/laravel-snappy 笔记:
再次强调,laravel-snappy 是对 knplabs/knp-snappy 的 laravel 集成,而底层使用的是 wkhtmltopdf/wkhtmltoimage 包
1.安装 wkhtmltopdf
1>从 wkhtmltopdf 官方安装:
https://wkhtmltopdf.org/downloads.html
2>作为 composer 的依赖来安装:
https://github.com/KnpLabs/snappy#wkhtmltopdf-binary-as-composer-dependencies
32位系统:
composer require h4cc/wkhtmltopdf-i386 0.12.x
composer require h4cc/wkhtmltoimage-i386 0.12.x
64位系统:
composer require h4cc/wkhtmltopdf-amd64 0.12.x
composer require h4cc/wkhtmltoimage-amd64 0.12.x
注意:
我们系统,可能缺少一些依赖包,例如:libXrender,我们需要自己手动安装
2.测试 wkhtmltopdf 安装是否成功
直接在命令行运行 wkhtmltopdf 命令
使用第二种方式来安装(作为 composer 依赖安装),安装后的目录位于:
/vendor/h4cc/wkhtmltoimage-amd64/bin
/vendor/h4cc/wkhtmltopdf-amd64/bin
注意:
vagrant 用户需要进行如下操作,来避免出现的 126 报错:
1>将下载的二进制软件,移动到不在同步文件夹中的路径,例如:
cp vendor/h4cc/wkhtmltoimage-amd64/bin/wkhtmltoimage-amd64 /usr/local/bin/
cp vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64 /usr/local/bin/
2>添加可执行权限:
chmod +x /usr/local/bin/wkhtmltoimage-amd64
chmod +x /usr/local/bin/wkhtmltopdf-amd64
3.barryvdh/laravel-snappy 安装 & 使用
1>composer 安装:
composer require barryvdh/laravel-snappy
laravel 5.5 已经使用了包自动发现,我们不需要手动添加 'ServiceProvider/Facade'。如果使用了 'laravel-dompdf',可能会产生冲突。这种情况下,需要手动来注册 Facade,来解决这个问题(没打算使用,有使用的,万一冲突了,记得这个提示!)
2>config/app.php
providers:
Barryvdh\Snappy\ServiceProvider::class,
aliases:
'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,
'SnappyImage' => Barryvdh\Snappy\Facades\SnappyImage::class,
3>发布配置文件:
php artisan vendor:publish --provider="Barryvdh\Snappy\ServiceProvider"
配置文件中,我们主要是需要修改,wkhtmltopdf 和 wkhtmltoimage 的路径
4>使用:
1.使用 App 容器:
$snappy = App::make('snappy.pdf');
$html = '<h1>dongxuemin</h1>';
// 从 HTML 字符串生成 PDF
$snappy->generateFromHtml($html, '/tmp/test.pdf');
// 从 URL 链接生成 PDF
$snappy->generate('http://www.github.com', '/tmp/test.php');
// 获取转换后的 PDF 字符串
$pdf_response = $snappy->getOutputFromHtml($html);
// 直接输出到浏览器下载
return response($pdf_response, 200, [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'attachment; filename="file.pdf"'
]);
2.使用封装(wrapper):
$pdf = App::make('snappy.pdf.wrapper');
$html = '<h1>dongxuemin</h1>';
// 加载 HTML
$pdf->loadHTML($html);
return $pdf->inline();
3.使用 Facade:
// 从 blade 模板加载
$pdf = PDF::loadView('invoice.blade.php', $view_data)
return $pdf->download('invoice.pdf');
// 链式调用:
return PDF::loadFile('http://www.github.com')->inline('github.pdf');
// 改变方向和纸张大小
PDF::loadHTML($html)
->setPaper('a4') // 纸张大小
->setOrientation('landscape') // 方向
->setOption('margin-bottom', 0) // 其他设置
->save('myfile.pdf'); // 存储
// ->output(); // 得到输出字符串
4.更多信息和参数设置,参考 wkhtmltopdf 文档:
http://wkhtmltopdf.org/usage/wkhtmltopdf.txt
4.总结完后,实战操作了下:
mac 系统使用 '第二种' 安装方法,报错:
/xxx/wkhtmltopdf-amd64 cannot execute binary file
搜索了半天,没找到有用的解决方法,只有采用 '第一种' 安装方法,官网下载软件包