使用laravel-snappy生成pdf

laravel-snappy基于wkhtmltopdf工具,可以比较完美的将web页面转成pdf格式。

安装过程

顺便把laravel及laravel-snappy安装过程记录下

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

composer create-project laravel/laravel example-app

composer require barryvdh/laravel-snappy

php artisan vendor:publish --provider="Barryvdh\Snappy\ServiceProvider"

config/app.php   'aliases'项加上

'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,
'SnappyImage' => Barryvdh\Snappy\Facades\SnappyImage::class,

使用

$pdf = PDF::loadView('pdf.invoice', $data);
$pdf->setPaper('a4')->setOption('encoding', 'utf-8')->setOption('margin-left', 0)->setOption('margin-right', 0)
    ->setOption('javascript-delay', 10000)->setOption('no-stop-slow-scripts', true);
$pdf->save($path)
//return $pdf->download('invoice.pdf');

用于调整生成pdf格式的css属性

.keep-together {
     page-break-inside: avoid;
}

.break-before {
     page-break-before: always;
}

.break-after {
     page-break-after: always;
} 

 

 使用laravel的command定时生成pdf

php artisan make:command pdf

查看代码
 <?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Services\PdfService;

class Pdf extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'pdf {name}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'pdf';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $name = $this->argument('name');
        $service = new PdfService();
        $service->pdf($name);
        $this->info('The command was successful!');
    }
}

调试

// 方法1
use Illuminate\Support\Facades\Artisan;

Route::post('/pdf/{name}', function ($name) {
    $exitCode = Artisan::call('pdf', [
        'name' => $name
    ]);
});

或者php artisan pdf 'aa'

重要提示

wkhtmltopdf 工具生成 pdf 的底层是使用 QT 浏览器,不支持 es6 等比较新的语法及新增的函数方法,使用这些语法会导致解析错误,不能生成 pdf。

也不支持 css3 样式属性。

posted @   carol2014  阅读(331)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示