Rumah > rangka kerja php > Laravel > teks badan

Artikel yang menerangkan cara mengeksport PDF dengan Laravel-snappy

藏色散人
Lepaskan: 2021-09-01 08:53:23
ke hadapan
2968 orang telah melayarinya

Lajur tutorial Laravel akan memperkenalkan kepada anda cara menggunakan Laravel-snappy untuk mengeksport PDF, saya harap ia dapat membantu rakan yang memerlukan.

Prakata

Terdapat banyak artikel tentang cara menggunakan Laravel-snappy dalam forum, tetapi kebanyakannya hanya menumpukan pada pemasangan dan contoh asas, dan tidak praktikal untuk aplikasi sebenar Tiada penjelasan tentang penggunaan, dan tiada jawapan kepada beberapa soalan dan keraguan, jadi saya akan menyelesaikannya di sini dan menganggapnya sebagai rekod.

Pemasangan

Ambil ubuntu sebagai contoh

1. Jalankan pemasangan wkhtmltopdf:

composer require h4cc/wkhtmltopdf-amd64 0.12.x
composer require h4cc/wkhtmltoimage-amd64 0.12.x
Salin selepas log masuk

Seperti namanya. , pemasangan ialah wkhtmltopdf dan wkhtmltoimage.

2. Salin wkhtmltopdf ke direktori perintah boleh laku ubuntu

sudo cp vendor/h4cc/wkhtmltoimage-amd64/bin/wkhtmltoimage-amd64 /usr/local/bin/
sudo cp vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64 /usr/local/bin/
//并使其可执行:
sudo chmod +x /usr/local/bin/wkhtmltoimage-amd64 
sudo chmod +x /usr/local/bin/wkhtmltopdf-amd64
Salin selepas log masuk

3 Pasang laravel-snappy

composer require barryvdh/laravel-snappy
Salin selepas log masuk

4 🎜>

Barryvdh\Snappy\ServiceProvider::class
Salin selepas log masuk
dalam tatasusunan penyedia dalam app.php 5. Tambahkan Facades pada tatasusunan alias dalam config/app.php

'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,
'SnappyImage' => Barryvdh\Snappy\Facades\SnappyImage::class,
Salin selepas log masuk
6 Jalankan fail konfigurasi yang dijana

php artisan vendor:publish --provider="Barryvdh\Snappy\ServiceProvider"
Salin selepas log masuk
Anda boleh melihat bahawa fail konfigurasi lalai ialah config/snappy.php:

return [
    'pdf' => [
        'enabled' => true,
        'binary'  => env('WKHTML_PDF_BINARY', '/usr/local/bin/wkhtmltopdf'),
        'timeout' => false,
        'options' => [],
        'env'     => [],
    ],
    'image' => [
        'enabled' => true,
        'binary'  => env('WKHTML_IMG_BINARY', '/usr/local/bin/wkhtmltoimage'),
        'timeout' => false,
        'options' => [],
        'env'     => [],
    ],
];
Salin selepas log masuk
Perhatikan bahawa terdapat lubang di sini, konfigurasi binari lalai ialah /usr/local/bin/wkhtmltopdf dan /usr/local/bin/wkhtmltoimage, apabila digunakan buat kali pertama, mesej ralat akan dilaporkan bahawa /usr/local/bin/wkhtmltopdf tidak wujud Ini kerana di bawah sistem Linux, laluan dan nama sebenar wkhtmltopdf dan wkhtmltoimage ialah: /usr /local/bin/wkhtmltopdf-amd64 dan /usr/local/bin/wkhtmltoimage-amd64.

Artikel yang menerangkan cara mengeksport PDF dengan Laravel-snappy

Oleh itu, maklumat konfigurasi perlu diubah suai kepada:

'pdf' => [
        ...
        'binary'  => env('WKHTML_PDF_BINARY', '/usr/local/bin/wkhtmltopdf-amd64'),
        ...
    ],
    'image' => [
        ...
        'binary'  => env('WKHTML_IMG_BINARY', '/usr/local/bin/wkhtmltoimage-amd64'),
        ...
    ],
Salin selepas log masuk
Mulakan

//使用方法1
$pdf = \PDF::loadView('welcome', $data);
return $pdf->download('welcome.pdf');
//使用方法2
$html = &#39;<html><head><meta charset="utf-8"></head><h1>订单id</h1><h2>12346546</h2></html>&#39;;
$pdf = \PDF::loadHTML($html);
return $pdf->inline();
Salin selepas log masuk
Banyak blog tidak mention it , dalam kaedah 1, ralat berikut akan dilaporkan:

The exit status code &#39;1&#39; says something went wrong: stderr: "Loading pages (1/6) [> ] 0% [======> ] 10% QSslSocket: cannot resolve CRYPTO_num_locks QSslSocket: cannot resolve CRYPTO_set_id_callback QSslSocket: cannot resolve CRYPTO_set_locking_callback QSslSocket: cannot resolve sk_free QSslSocket: cannot resolve sk_num QSslSocket: cannot resolve sk_pop_free QSslSocket: cannot resolve sk_value QSslSocket: cannot resolve SSL_library_init QSslSocket: cannot resolve SSL_load_error_strings QSslSocket: cannot resolve SSLv3_client_method QSslSocket: cannot resolve SSLv23_client_method QSslSocket: cannot resolve SSLv3_server_method QSslSocket: cannot resolve SSLv23_server_method QSslSocket: cannot resolve X509_STORE_CTX_get_chain QSslSocket: cannot resolve OPENSSL_add_all_algorithms_noconf QSslSocket: cannot resolve OPENSSL_add_all_algorithms_conf QSslSocket: cannot resolve SSLeay QSslSocket: cannot call unresolved function CRYPTO_num_locks QSslSocket: cannot call unresolved function CRYPTO_set_id_callback QSslSocket: cannot call unresolved function CRYPTO_set_locking_callback QSslSocket: cannot call unresolved function SSL_library_init QSslSocket: cannot call unresolved function SSLv23_client_method QSslSocket: cannot call unresolved function sk_num [==================> ] 31% QSslSocket: cannot call unresolved function SSLv23_client_method QSslSocket: cannot call unresolved function SSL_library_init [============================================================] 100% Counting pages (2/6) [============================================================] Object 1 of 1 Resolving links (4/6) [============================================================] Object 1 of 1 Loading headers and footers (5/6) Printing pages (6/6) [> ] Preparing [============================================================] Page 1 of 1 Done Exit with code 1 due to network error: UnknownNetworkError QSslSocket: cannot call unresolved function CRYPTO_num_locks QSslSocket: cannot call unresolved function CRYPTO_set_id_callback QSslSocket: cannot call unresolved function CRYPTO_set_locking_callback " stdout: "" command: /usr/local/bin/wkhtmltopdf-amd64 --lowquality &#39;/tmp/knp_snappy612c3edcdfc855.21787864.html&#39; &#39;/tmp/knp_snappy612c3edcdfce49.80482557.pdf&#39;.
Salin selepas log masuk
Pelaksanaan:

sudo apt-get update
sudo apt install libssl1.0-dev
Salin selepas log masuk
Pembaikan selesai dan halaman selamat datang dieksport.

Jika anda menggunakan kaedah save () untuk menyimpan, ia akan disimpan ke folder /public secara lalai Jika nama fail adalah sama, simpan kedua akan meminta bahawa fail itu sudah wujud.

Atas ialah kandungan terperinci Artikel yang menerangkan cara mengeksport PDF dengan Laravel-snappy. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
pdf
sumber:learnku.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan