


Comment utiliser Laravel snappy pour générer des PDF et les intégrer dans Laravel-admin
Aug 15, 2020 pm 01:54 PMLa 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 !
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('user_id')) { $this->grid->model()->where('user_id', request()->user_id); } else { $this->lackOfUserId = true; } return $this; }*/ return parent::withScope($scope); } public function export() { // 具體的導(dǎo)出邏輯,比如: if($this->lackOfUserId) { $headers = [ 'Content-Encoding' => 'UTF-8', 'Content-Type' => 'text/html;charset=UTF-8', ]; response('請先篩選出用戶', 200, $headers)->send(); exit(); } $author = $this->grid->model()->getOriginalModel()->first()->user->user_name; $this->grid->model()->orderBy('add_time', 'desc'); // 按年-月分組數(shù)據(jù) $data = collect($this->getData())->groupBy(function ($post) { return Carbon::parse(date('Y-m-d',$post['add_time']))->format('Y-m'); })->toArray(); // 渲染數(shù)據(jù)到blade模板 $output = PDF::loadView('pdf.weibo', compact('data'))->setOption('footer-center', '[page]')->output(); $headers = [ 'Content-Type' => 'application/pdf', 'Content-Disposition' => "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('pdf-exporter', PdfExporter::class);
Enfin, le Grid
Utilisation correspondant dans la méthode :
protected function grid(){ // 其他邏輯... // 添加導(dǎo)出PDF的擴展 $grid->exporter('pdf-exporter'); 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'imageasset('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 :
? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ?
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

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

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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

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.

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

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.

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

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

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

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