tenantcloud / laravel-snappy
为Laravel提供的Snappy PDF/Image
Requires
- php: >=7
- illuminate/filesystem: ^5.5|^6|^7|^8
- illuminate/support: ^5.5|^6|^7|^8
- knplabs/knp-snappy: ^1
This package is auto-updated.
Last update: 2022-08-24 00:49:26 UTC
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);
可选地,添加如下所示的facades
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/图片实例,并加载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许可许可。