wird die Methode zum Generieren von PDFs mit Laravel Snappy vorgestellt und in Laravel-Admin integriert. Ich hoffe, dass es für Freunde in Not hilfreich sein wird!
Laravel snappyIch habe Python+wkhtmltopdf bereits zum Exportieren von PDFs verwendet. Es verfügt über viele Optionen zur Seitenanpassung und hilft Ihnen automatisch bei der Erfassung von Bildern aus dem Internet. als PDF gerendert. Dieses Mal wollte ich die Funktion zum Exportieren von PDF in Laravel-admin implementieren, daher habe ich das Erweiterungspaket Laravel Snappy gefunden, das eine Kapselung des Projekts https://github.com/KnpLabs/snappy ist. Zufälligerweise wird es auch übergeben Rufen Sie das Programm wkhtmltopdf auf, um PDF zu generieren.
Installation und Konfiguration// 安装扩展包
composer require barryvdh/laravel-snappy
// 将wkhtmltopdf作为composer依赖
// 对于64位系统,使用:
composer require h4cc/wkhtmltopdf-amd64 0.12.x
composer require h4cc/wkhtmltoimage-amd64 0.12.x
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
'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class, 'SnappyImage' => Barryvdh\Snappy\Facades\SnappyImage::class,
-Datei hinzu: app.config
php artisan vendor:publish --provider="Barryvdh\Snappy\ServiceProvider"
alias
Nehmen Sie dann die folgende Konfiguration in der -Konfigurationsdatei vor: WKHTML_PDF_BINARY=/usr/local/bin/wkhtmltopdf-amd64 WKHTML_IMG_BINARY=/usr/local/bin/wkhtmltoimage-amd64
Verwenden Sie .env
, um PDF zu generieren, indem Sie die Rendering-Blade-Vorlage laden: snappy.php
'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' => [], ],
$pdf = PDF::loadView('pdf.invoice', $data); //pdf.invoice是你的blade模板 return $pdf->download('invoice.pdf');
return PDF::loadFile('http://www.github.com')->inline('github.pdf');
Laravel-admin-Exportfunktionstransformation
Das Standardexportformat von Laravel-admin ist csv, hier werden wir es in das gewünschte PDF umwandeln Format.Einfache Analyse des Laravel-Admin-Exportprinzips
Schauen Sie sich die Exportschaltfläche an. Sie können das Format der drei Exporteingänge wie folgt abrufen:PDF::loadHTML($html)->setPaper('a4')->setOrientation('landscape')->setOption('margin-bottom', 0)->save('myfile.pdf') // 更多选项可查看wkhtmltopdf的手册:https://wkhtmltopdf.org/usage/wkhtmltopdf.txt
http://hostname/posts?_export_=all // 导出全部 http://hostname/posts?_export_=page%3A1 // 导出当前页 http://hostname/posts?_export_=selected%3A1 // 导出选定的行
ausgeführt:
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();}
Das Wichtigste ist die index
-Methode, wir werden eine neue Klasse erstellen erbt die /vendor/encore/laravel-admin/src/Grid.php
-Klasse, um die gewünschte Exportlogik zu implementieren. Schauen Sie sich außerdem die
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(); // 这里将调用某个类的export方法 }}
$this->handleExportRequest(true);
Wir können auch in der Unterklasse umschreiben, um einige Parametereinstellungen und das Abfangen durchzuführen. export
AbstractExporter
getExporter
withScope
Erstellen Sie zunächst eine Erweiterung, z. B. . Der Code wird wie folgt implementiert: protected function getExporter($scope){
return (new Exporter($this))->resolve($this->exporter)->withScope($scope);}
<?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() { // 具体的导出逻辑,比如: 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'); // 按年-月分组数据 $data = collect($this->getData())->groupBy(function ($post) { return Carbon::parse(date('Y-m-d',$post['add_time']))->format('Y-m'); })->toArray(); // 渲染数据到blade模板 $output = PDF::loadView('pdf.weibo', compact('data'))->setOption('footer-center', '[page]')->output(); $headers = [ 'Content-Type' => 'application/pdf', 'Content-Disposition' => "attachment; filename=$author.pdf", ]; // 导出文件, response(rtrim($output, "\n"), 200, $headers)->send(); exit; } }
-Methode: app/Admin/Extensions/PdfExporter.php
Exporter::extend('pdf-exporter', PdfExporter::class);
app/Admin/bootstrap.php
Grid
Hinweise
Die CSS- und JS-Adressen in der Blade-Vorlage müssen die vollständige URL-Adresse sein, daher sollte in geändert werden. Die Bildadresse sollte am besten das http-Protokoll anstelle von https verwenden ist weniger fehleranfällig
mix('css/app.css')
asset('css/app.css')
Das obige ist der detaillierte Inhalt vonSo verwenden Sie Laravel Snappy, um PDFs zu generieren und in Laravel-admin zu integrieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!