亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Maison cadre php Laravel Comment utiliser Laravel snappy pour générer des PDF et les intégrer dans Laravel-admin

Comment utiliser Laravel snappy pour générer des PDF et les intégrer dans Laravel-admin

Aug 15, 2020 pm 01:54 PM
laravel pdf

La colonne tutorielle suivante de Laravel vous présentera comment utiliser Laravel Snappy pour générer un PDF et l'intégrer dans Laravel-admin. J'espère que cela vous sera utile. aux amis dans le besoin !

Comment utiliser Laravel snappy pour générer des PDF et les intégrer dans Laravel-admin

Laravel snappy

J'ai déjà utilisé python+wkhtmltopdf pour exporter des PDF, wkhtmltopdf est vraiment puissant L'outil propose de nombreuses options de personnalisation de page et vous aidera automatiquement à récupérer des images sur Internet et à les restituer au format PDF. Cette fois, je voulais implémenter la fonction d'exportation de PDF dans Laravel-admin, j'ai donc trouvé le package d'extension Laravel snappy, qui est une encapsulation du projet https://github.com/KnpLabs/snappy, par co?ncidence, il est également transmis. Appelez le programme wkhtmltopdf pour générer un PDF.

Installation et configuration

// 安裝擴展包
composer require barryvdh/laravel-snappy

// 將wkhtmltopdf作為composer依賴
// 對于64位系統(tǒng),使用:
composer require h4cc/wkhtmltopdf-amd64 0.12.x
composer require h4cc/wkhtmltoimage-amd64 0.12.x

Pour l'environnement de développement de la propriété, exécutez également?:

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

Après l'installation, dansapp.config Dans la touche alias, définissez l'alias de fa?ade (facultatif) :

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

Publiez enfin le fichier de ressources :

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

Ajoutez dans le fichier .env :

WKHTML_PDF_BINARY=/usr/local/bin/wkhtmltopdf-amd64
WKHTML_IMG_BINARY=/usr/local/bin/wkhtmltoimage-amd64

Effectuez ensuite la configuration suivante dans le snappy.php fichier de configuration?:

    'pdf' => [
        'enabled' => true,
        'binary'  => env('WKHTML_PDF_BINARY', 'vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64'),
        'timeout' => 3600,
        'options' => [],
        'env'     => [],
    ],

    'image' => [
        'enabled' => true,
        'binary'  => env('WKHTML_IMG_BINARY', 'vendor/h4cc/wkhtmltoimage-amd64/bin/wkhtmltoimage-amd64'),
        'timeout' => 3600,
        'options' => [],
        'env'     => [],
    ],

Utilisez

pour générer un PDF en chargeant le modèle de lame de rendu?:

$pdf = PDF::loadView('pdf.invoice', $data); //pdf.invoice是你的blade模板
return $pdf->download('invoice.pdf');

générer via des liens externes?:

return PDF::loadFile('http://www.github.com')->inline('github.pdf');

Générer via html, effectuer divers réglages et enregistrer?:

PDF::loadHTML($html)->setPaper('a4')->setOrientation('landscape')->setOption('margin-bottom', 0)->save('myfile.pdf')
// 更多選項可查看wkhtmltopdf的手冊:https://wkhtmltopdf.org/usage/wkhtmltopdf.txt

Modification de la fonction d'exportation de Laravel-admin

Le format d'export par défaut de Laravel-admin est csv, nous allons ici le transformer au format PDF souhaité.

Une analyse simple du principe d'exportation de Laravel-admin

Regardez le bouton d'exportation, et vous pouvez obtenir le format des trois entrées d'exportation comme suit?:

http://hostname/posts?_export_=all  // 導(dǎo)出全部
http://hostname/posts?_export_=page%3A1 // 導(dǎo)出當前頁
http://hostname/posts?_export_=selected%3A1 // 導(dǎo)出選定的行

La méthode du contr?leur correspondante doit être index à partir de là, vous pouvez trouver ce qui suit dans /vendor/encore/laravel-admin/src/Grid.php?:

public function render(){
    $this->handleExportRequest(true);  
    try {
        $this->build();
    } catch (\Exception $e) {
        return Handler::renderException($e);
    }
    $this->callRenderingCallback();
    return view($this->view, $this->variables())->render();}

Si l'url a le paramètre _export=…, il exécutera le code dans $this->handleExportRequest(true);?:

protected function handleExportRequest($forceExport = false){
    if (!$scope = request(Exporter::$queryName)) {
        return;
    }

    // clear output buffer.
    if (ob_get_length()) {
        ob_end_clean();
    }

    $this->disablePagination();

    if ($forceExport) {
        $this->getExporter($scope)->export();  // 這里將調(diào)用某個類的export方法
    }}

Le plus important est la méthode export Nous allons créer une nouvelle classe qui hérite de la classe AbstractExporter pour implémenter la logique d'exportation que nous souhaitons. De plus, regardez la méthode getExporter :

protected function getExporter($scope){
    return (new Exporter($this))->resolve($this->exporter)->withScope($scope);}

Nous pouvons également réécrire withScope dans la sous-classe pour effectuer certains paramétrages et interceptions.

Commencer à modifier la fonction d'exportation

Après avoir compris les principes de base et consulté la documentation de Laravel-admin, nous pouvons commencer à modifier la fonction d'exportation .

Tout d'abord, créez une extension, telle que app/Admin/Extensions/PdfExporter.php, et le code est implémenté comme suit?:

<?php

namespace App\Admin\Extensions;

use Encore\Admin\Grid\Exporters\AbstractExporter;
use Encore\Admin\Grid\Exporter;
use PDF;

class PdfExporter extends AbstractExporter
{
    protected $lackOfUserId = false;

    public function withScope($scope){
        // 你自己的一些處理邏輯,比如:
        /*if ($scope == Exporter::SCOPE_ALL) {
            if(request()->has(&#39;user_id&#39;)) {
                $this->grid->model()->where(&#39;user_id&#39;, request()->user_id);
            } else {
                $this->lackOfUserId = true;
            }
            return $this;
        }*/
        return parent::withScope($scope);
    }

    public function export()
    {
        // 具體的導(dǎo)出邏輯,比如:
        if($this->lackOfUserId) {
            $headers = [
                &#39;Content-Encoding&#39;    => &#39;UTF-8&#39;,
                &#39;Content-Type&#39;        => &#39;text/html;charset=UTF-8&#39;,
            ];
            response(&#39;請先篩選出用戶&#39;, 200, $headers)->send();
            exit();
        }
        $author = $this->grid->model()->getOriginalModel()->first()->user->user_name;

        $this->grid->model()->orderBy(&#39;add_time&#39;, &#39;desc&#39;);

        // 按年-月分組數(shù)據(jù)
        $data = collect($this->getData())->groupBy(function ($post) {
            return Carbon::parse(date(&#39;Y-m-d&#39;,$post[&#39;add_time&#39;]))->format(&#39;Y-m&#39;);
        })->toArray();
        // 渲染數(shù)據(jù)到blade模板
        $output = PDF::loadView(&#39;pdf.weibo&#39;, compact(&#39;data&#39;))->setOption(&#39;footer-center&#39;, &#39;[page]&#39;)->output();

        $headers = [
            &#39;Content-Type&#39;        => &#39;application/pdf&#39;,
            &#39;Content-Disposition&#39; => "attachment; filename=$author.pdf",
        ];

        // 導(dǎo)出文件,
        response(rtrim($output, "\n"), 200, $headers)->send();

        exit;
    }
}

Ensuite, enregistrez l'extension dans app/Admin/bootstrap.php?:

Exporter::extend(&#39;pdf-exporter&#39;, PdfExporter::class);

Enfin, le GridUtilisation correspondant dans la méthode :

protected function grid(){
    // 其他邏輯...

    // 添加導(dǎo)出PDF的擴展
    $grid->exporter(&#39;pdf-exporter&#39;);
    return $grid;}

De cette fa?on, lorsque vous cliquez sur le bouton exporter, vous pouvez télécharger le PDF.

Notes

  • Les adresses CSS et JS dans le modèle de lame doivent être l'adresse URL complète, donc mix('css/app.css') doit être modifié Pour l'adresse de l'image asset('css/app.css')
  • il est préférable d'utiliser le protocole http au lieu de https, qui est moins sujet aux erreurs

Enfin, postez un rendu :

使用 Laravel snappy 生成 PDF 并集成到 Laravel-admin

? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ?

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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Stock Market GPT

Stock Market GPT

Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Comment dois-je vérifier si l'ordinateur ne reconna?t pas soudainement l'imprimante? Comment dois-je vérifier si l'ordinateur ne reconna?t pas soudainement l'imprimante? Sep 20, 2025 am 08:27 AM

Réponse: L'ordinateur ne peut pas reconna?tre l'imprimante. Il est généralement causé par des problèmes de connexion, de lecteur ou de service. Vérifiez d'abord si la connexion USB ou réseau est normale pour vous assurer que l'imprimante est allumée; Si la connexion est correcte, redémarrez l'appareil et vérifiez l'état du pilote dans le "gestionnaire de périphériques", mettez à jour ou réinstallez le pilote officiel du site Web; Confirmez que le service Windows "PrintSpooler" a été démarré et défini sur automatique; Utilisez l'outil Système "Dépannage" pour résoudre les problèmes. Si le pilote ne parvient pas à s'installer à plusieurs reprises, vous devez désinstaller complètement l'ancien pilote et nettoyer les fichiers résiduels. Après le redémarrage, installez la nouvelle version du pilote en tant qu'administrateur et utilisez le mode de compatibilité ou la restauration du système si nécessaire. S'il y a un problème après la mise à jour de Windows, vous devez d'abord télécharger le pilote qui est adapté au nouveau système, ou annuler la mise à jour et vérifier l'état du service. Les détails facilement négligés lors de l'enquête comprennent

Comment utiliser l'écran Split iPad pour la lecture et la traduction_ipad Split Screen Comparaison et le didacticiel de l'application de traduction Comment utiliser l'écran Split iPad pour la lecture et la traduction_ipad Split Screen Comparaison et le didacticiel de l'application de traduction Sep 15, 2025 pm 01:33 PM

L'écran divisé iPad peut améliorer l'efficacité de la lecture et de la traduction et comparer le texte d'origine avec la traduction à travers les écrans divisés gauche et droite. La méthode de fonctionnement consiste à glisser la barre de quai en bas, à maintenir l'application longue et à glisser et à déposer sur l'écran de fractionnement du bord. Il est recommandé d'utiliser la marginnote avec le dictionnaire européen, Goodnotes, LiquidText et d'autres applications qui prennent en charge la traduction de glisser-déposer ou la collaboration à écran partagé, et combinent la fonction de texte en temps réel iPados pour identifier les images et le texte pour optimiser l'expérience de lecture.

Pourquoi Windows ne peut-il pas ouvrir les fichiers PDF? Vous apprendre les étapes pour installer rapidement les lecteurs PDF Pourquoi Windows ne peut-il pas ouvrir les fichiers PDF? Vous apprendre les étapes pour installer rapidement les lecteurs PDF Sep 15, 2025 pm 03:42 PM

Le système Windows ne peut pas ouvrir les fichiers PDF directement en raison du manque de lecteurs professionnels. Bien que le bord puisse être vu, ses fonctions sont limitées. Les opérations complexes ou la composition nécessitent des outils professionnels tels qu'Adobe AcrobatRenerdc, Foxit Reader ou Sumatrapdf. Ce dernier est meilleur dans la fonction, les performances, la sécurité et l'expérience. Après l'installation, vous pouvez ouvrir automatiquement en définissant le programme par défaut par "Open Method".

Comment utiliser SF Express City Monthly Checkout_Apply et utiliser le compte de paiement mensuel de SF Express City Comment utiliser SF Express City Monthly Checkout_Apply et utiliser le compte de paiement mensuel de SF Express City Sep 16, 2025 pm 01:45 PM

Pour demander un paiement mensuel à SF Express City, vous devez soumettre les informations de votre entreprise et votre licence commerciale et obtenir un compte après l'approbation de l'examen; Vous devez ajouter le préfixe "ZD" avant le compte lors de la connexion; Vous pouvez passer une commande en ligne, prendre rendez-vous pour récupérer des articles et imprimer un Waybill; Soutenir le projet de loi enquête, émission et téléchargement de factures; Les entreprises peuvent également définir les autorisations des employés et attribuer différents r?les et restrictions fonctionnelles.

Comment rechercher des fichiers dans votre propre disque dans Quark Network Disk_Quark Network Disk Profice Skills Comment rechercher des fichiers dans votre propre disque dans Quark Network Disk_Quark Network Disk Profice Skills Sep 20, 2025 am 11:06 AM

Utilisez la recherche de mots clés, les conditions de filtrage, les chemins de fichier et les enregistrements récents pour localiser rapidement les fichiers de disque réseau Quark. Entrez d'abord la recherche de mots clés dans la zone de recherche, puis affiner la portée par type, temps, etc. via la fonction de filtre, afficher le chemin du fichier ou collecter des dossiers communs pour un accès rapide la prochaine fois, et vous pouvez également récupérer les fichiers des opérations récentes dans la liste "récente".

Comment enregistrer les messages dans un fichier dans Laravel? Comment enregistrer les messages dans un fichier dans Laravel? Sep 21, 2025 am 06:04 AM

LaravelsesMonologTologMessagesViathelogFacade, avec DefaultLogsStoredInstorage / Logs / Laravel.log.ConfigureChannelsInConfig / Logging.PhptoControloutput

Comment utiliser la relation HasManythrough à Laravel? Comment utiliser la relation HasManythrough à Laravel? Sep 17, 2025 am 06:38 AM

AcountrycanaccessalPostStwroughusersusinghasManythrough.forexample, withcountries, utilisateurs, andpostStableSinkedByforeignkeys, theCountryModeldefinesahasManythroughrelationTopostViauser, permettant de permettre de permettre à la netteté de manière

Comment créer une recherche en texte intégral dans Laravel? Comment créer une recherche en texte intégral dans Laravel? Sep 16, 2025 am 03:42 AM

ToImplementfull-textSearchInLaravel, FirstAddafull-TextIndexinthemigration Using $ Table-> fullText (['Title', 'Content']); puis utilisez Where

See all articles