Maison > cadre php > Laravel > le corps du texte

Un article expliquant comment exporter des PDF avec Laravel-snappy

藏色散人
Libérer: 2021-09-01 08:53:23
avant
2969 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

3. Installez laravel-snappy

composer require barryvdh/laravel-snappy
Copier après la connexion

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

Barryvdh\Snappy\ServiceProvider::class
Copier après la connexion

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

'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,
'SnappyImage' => Barryvdh\Snappy\Facades\SnappyImage::class,
Copier après la connexion

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

php artisan vendor:publish --provider="Barryvdh\Snappy\ServiceProvider"
Copier après la connexion

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'     => [],
    ],
];
Copier après la connexion

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'),
        ...
    ],
Copier après la connexion

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();
Copier après la connexion

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;.
Copier après la connexion

Exécuter :

sudo apt-get update
sudo apt install libssl1.0-dev
Copier après la connexion

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!

Étiquettes associées:
pdf
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal