mymediamagnet / 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
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/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许可证