nimfus / laravel-snappy
为Laravel的Snappy PDF/Image
Requires
- php: >=7.3
- illuminate/filesystem: ^5.5|^6|^7|^8
- illuminate/support: ^5.5|^6|^7|^8
- knplabs/knp-snappy: ^1
README
此包是Snappy的ServiceProvider:https://github.com/KnpLabs/snappy.
Wkhtmltopdf安装
选择以下选项之一来安装wkhtmltopdf/wkhtmltoimage。
- 从这里下载wkhtmltopdf;
- 或者将其作为composer依赖项安装。有关更多信息,请参阅wkhtmltopdf二进制作为composer依赖项。
注意!请注意,某些依赖项(例如libXrender)可能不在您的系统上,可能需要手动安装。
测试wkhtmltopdf安装
安装后,您应该能够从命令行/壳中运行wkhtmltopdf。
如果您选择了第二个选项,二进制文件将在/vendor/h4cc/wkhtmltoimage-amd64/bin
和/vendor/h4cc/wkhtmltopdf-amd64/bin
。
注意vagrant用户!
将二进制文件移动到不在同步文件夹中的路径,例如
cp vendor/h4cc/wkhtmltoimage-amd64/bin/wkhtmltoimage-amd64 /usr/local/bin/ cp vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64 /usr/local/bin/
并使其可执行
chmod +x /usr/local/bin/wkhtmltoimage-amd64 chmod +x /usr/local/bin/wkhtmltopdf-amd64
这将防止错误126。
包安装
在您的composer.json中要求此包,并更新composer。
composer require barryvdh/laravel-snappy
Laravel
Laravel 5.5使用包自动发现,因此不需要您手动添加ServiceProvider/Facade。如果您还使用laravel-dompdf,请注意冲突。手动注册Facade可能更好。
更新composer后,将ServiceProvider添加到config/app.php中的providers数组中
Barryvdh\Snappy\ServiceProvider::class,
可选地,您可以使用Facade来缩短代码。将其添加到您的facades中
'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class, 'SnappyImage' => Barryvdh\Snappy\Facades\SnappyImage::class,
最后,您可以发布配置文件
php artisan vendor:publish --provider="Barryvdh\Snappy\ServiceProvider"
Snappy配置文件
对此配置文件(config/snappy.php)的主要更改将是二进制文件的路径。
例如,当使用composer加载时,该行应如下所示
'binary' => base_path('vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64'),
如果您遵循了vagrant步骤,该行应如下所示
'binary' => '/usr/local/bin/wkhtmltopdf-amd64',
对于Windows用户,您必须在wkhtmltopdf的bin路径中添加双引号
'binary' => '"C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf"'
Lumen
在bootstrap/app.php
中添加
class_alias('Barryvdh\Snappy\Facades\SnappyPdf', 'PDF'); $app->register(Barryvdh\Snappy\LumenServiceProvider::class);
可选地,添加Facade,如下所示
class_alias(Barryvdh\Snappy\Facades\SnappyPdf::class, 'PDF'); class_alias(Barryvdh\Snappy\Facades\SnappyImage::class, 'SnappyImage');
要自定义配置文件,将文件/vendor/barryvdh/laravel-snappy/config/snappy.php
复制到/config
文件夹。
用法
您可以创建一个新的Snappy PDF/Image实例,并加载一个HTML字符串、文件或视图名称。您可以将它保存到文件中,或内联(在浏览器中显示)或下载。
使用App容器
$snappy = App::make('snappy.pdf'); //To file $html = '<h1>Bill</h1><p>You owe me money, dude.</p>'; $snappy->generateFromHtml($html, '/tmp/bill-123.pdf'); $snappy->generate('http://www.github.com', '/tmp/github.pdf'); //Or output: return new Response( $snappy->getOutputFromHtml($html), 200, array( 'Content-Type' => 'application/pdf', 'Content-Disposition' => 'attachment; filename="file.pdf"' ) );
使用包装器
$pdf = App::make('snappy.pdf.wrapper'); $pdf->loadHTML('<h1>Test</h1>'); return $pdf->inline();
或使用外观
$pdf = PDF::loadView('pdf.invoice', $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()函数获取渲染的PDF,然后您可以自己保存/输出。
有关更多信息/设置,请参阅wkhtmltopdf手册。
测试 - PDF模拟
作为模拟的替代方案,您可以使用PDF
外观的fake
方法。当使用模拟时,断言是在测试代码执行之后进行的
<?php namespace Tests\Feature; use Tests\TestCase; use PDF; class ExampleTest extends TestCase { public function testPrintOrderShipping() { PDF::fake(); // Perform order shipping... PDF::assertViewIs('view-pdf-order-shipping'); PDF::assertSee('Name'); } }
其他可用的断言
PDF::assertViewIs($value); PDF::assertViewHas($key, $value = null); PDF::assertViewHasAll(array $bindings); PDF::assertViewMissing($key); PDF::assertSee($value); PDF::assertSeeText($value); PDF::assertDontSee($value); PDF::assertDontSeeText($value); PDF::assertFileNameIs($value);
许可证
此Laravel的Snappy包装器是开源软件,受MIT许可证许可