barryvdh/laravel-snappy

Snappy PDF/Image for Laravel

资助包维护!
barryvdh
fruitcake.nl

安装数: 16,653,291

依赖者: 46

建议者: 9

安全: 0

星标: 2,630

关注者: 49

分支: 290

开放问题: 48

v1.0.3 2024-03-09 19:20 UTC

README

Tests Packagist License Latest Stable Version Total Downloads Fruitcake

此包是 Snappy 的 ServiceProvider: https://github.com/KnpLabs/snappy

Wkhtmltopdf 安装

选择以下选项之一安装 wkhtmltopdf/wkhtmltoimage。

  1. 这里下载 wkhtmltopdf;
  2. 或者将其作为 composer 依赖项安装。有关更多信息,请参阅wkhtmltopdf 二进制文件作为 composer 依赖项

注意!请注意,某些依赖项(例如 libXrender)可能不在您的系统上,可能需要手动安装。

测试 Wkhtmltopdf 安装

安装后,您应该可以从命令行/shell中运行 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();

或使用 Facade

$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 Facade 的 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 许可证