Maison  >  Article  >  cadre php  >  Un article expliquant comment exporter des PDF avec Laravel-snappy

Un article expliquant comment exporter des PDF avec Laravel-snappy

藏色散人
藏色散人avant
2021-08-30 15:27:292837parcourir

La colonne tutorielle suivante de Laravel vous présentera comment utiliser Laravel-snappy pour exporter des PDF. J'espère qu'elle sera utile aux amis qui en ont besoin !

Avant-propos

Il existe de nombreux articles sur la façon d'utiliser Laravel-snappy dans le forum, mais beaucoup d'entre eux se concentrent uniquement sur l'installation et des exemples de base. Ils n'expliquent pas l'utilisation des applications réelles et ne répondent pas à certaines questions et doutes. donc dans Trions cela et gardons-le comme un enregistrement.

Installation

Prenons Ubuntu comme exemple

1 Exécutez l'installation wkhtmltopdf :

composer require h4cc/wkhtmltopdf-amd64 0.12.x
composer require h4cc/wkhtmltoimage-amd64 0.12.x

Comme son nom l'indique, wkhtmltopdf et wkhtmltoimage sont installés respectivement.

2. Copiez wkhtmltopdf dans le répertoire de la commande exécutable 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

3. Installez laravel-snappy

composer require barryvdh/laravel-snappy

4 Ajoutez ServiceProvider au tableau des fournisseurs dans config/app.php

Barryvdh\Snappy\ServiceProvider::class

5. tableau d'alias dans config/app.php

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

6. Exécutez le fichier de configuration généré

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

Vous pouvez voir que le fichier de configuration par défaut est 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'     => [],
    ],
];

Notez qu'il y a un trou ici, le binaire par défaut. configuration Pour /usr/local/bin/wkhtmltopdf et /usr/local/bin/wkhtmltoimage, lorsque vous l'utilisez pour la première fois, un message d'erreur /usr/local/bin/wkhtmltopdf sera signalé car sous Linux. system, wkhtmltopdf et Les vrais chemins et noms de wkhtmltoimage sont : /usr/local/bin/wkhtmltopdf-amd64 et /usr/local/bin/wkhtmltoimage-amd64.

Un article expliquant comment exporter des PDF avec Laravel-snappy

Par conséquent, vous devez modifier les informations de configuration pour :

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

Commencer à utiliser

//使用方法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();

De nombreux blogs n'ont pas mentionné que dans la méthode 1, une telle erreur sera signalée :

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;.

Exécuter :

sudo apt-get update
sudo apt install libssl1.0-dev

Réparer terminé, exportez la page d'accueil.

Si vous utilisez la méthode save () pour enregistrer, il sera enregistré par défaut dans le dossier /public. Si le nom du fichier est le même, la deuxième sauvegarde indiquera que le fichier existe déjà.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer