Heim PHP-Framework Laravel So verwenden Sie Laravel Snappy, um PDFs zu generieren und in Laravel-admin zu integrieren

So verwenden Sie Laravel Snappy, um PDFs zu generieren und in Laravel-admin zu integrieren

Aug 15, 2020 pm 01:54 PM
laravel pdf

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!

So verwenden Sie Laravel Snappy, um PDFs zu generieren und in Laravel-admin zu integrieren

Laravel snappy

Ich 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
Nach dem Login kopieren
Für die Homestead-Entwicklungsumgebung müssen Sie außerdem Folgendes ausführen:
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
Nach dem Login kopieren
Nach der Installation legen Sie den Fassadenalias (optional) im

-Schlüssel fest Ressourcendatei:

'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,
'SnappyImage' => Barryvdh\Snappy\Facades\SnappyImage::class,
Nach dem Login kopieren

Fügen Sie der

-Datei hinzu: app.config

php artisan vendor:publish --provider="Barryvdh\Snappy\ServiceProvider"
Nach dem Login kopieren
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
Nach dem Login kopieren

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'     => [],
    ],
Nach dem Login kopieren

Durch externes generieren Links:

$pdf = PDF::loadView('pdf.invoice', $data); //pdf.invoice是你的blade模板
return $pdf->download('invoice.pdf');
Nach dem Login kopieren
über HTML Generieren, verschiedene Einstellungen vornehmen und speichern:
return PDF::loadFile('http://www.github.com')->inline('github.pdf');
Nach dem Login kopieren

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
Nach dem Login kopieren
Die entsprechende Controller-Methode sollte sein, verfolgen Sie sie von hier aus , Sie finden in :
http://hostname/posts?_export_=all  // 导出全部
http://hostname/posts?_export_=page%3A1 // 导出当前页
http://hostname/posts?_export_=selected%3A1 // 导出选定的行
Nach dem Login kopieren

Wenn die URL den Parameter _export=... enthält, wird der Code in

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();}
Nach dem Login kopieren

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

-Methode an:

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方法
    }}
Nach dem Login kopieren
$this->handleExportRequest(true); Wir können

auch in der Unterklasse umschreiben, um einige Parametereinstellungen und das Abfangen durchzuführen.

exportAbstractExportergetExporter

Beginnen Sie mit der Änderung der Exportfunktion

withScope

Nachdem wir die Grundprinzipien verstanden und die Laravel-Admin-Dokumentation gelesen haben, können wir mit der Änderung der Exportfunktion beginnen.

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);}
Nach dem Login kopieren
Dann registrieren Sie die Erweiterung in

:

<?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()
    {
        // 具体的导出逻辑,比如:
        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;);

        // 按年-月分组数据
        $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();
        // 渲染数据到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",
        ];

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

        exit;
    }
}
Nach dem Login kopieren

Verwenden Sie sie schließlich in der

-Methode: app/Admin/Extensions/PdfExporter.php

Exporter::extend(&#39;pdf-exporter&#39;, PdfExporter::class);
Nach dem Login kopieren

Auf diese Weise, wann Wenn Sie auf die Schaltfläche „Exportieren“ klicken, können Sie das PDF herunterladen.

app/Admin/bootstrap.php

GridHinweise

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

  • Schließlich posten Sie ein Rendering: 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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Laravel – Handwerkerbefehle Laravel – Handwerkerbefehle Aug 27, 2024 am 10:51 AM

Laravel – Artisan Commands – Laravel 5.7 bietet eine neue Möglichkeit, neue Befehle zu behandeln und zu testen. Es enthält eine neue Funktion zum Testen von Handwerkerbefehlen und die Demonstration wird unten erwähnt?

Laravel – Paginierungsanpassungen Laravel – Paginierungsanpassungen Aug 27, 2024 am 10:51 AM

Laravel – Paginierungsanpassungen – Laravel enthält eine Paginierungsfunktion, die einem Benutzer oder Entwickler hilft, eine Paginierungsfunktion einzubinden. Der Laravel-Paginator ist in den Abfrage-Builder und Eloquent ORM integriert. Die Paginierungsmethode automatisch

Wie bekomme ich den Rückgabecode, wenn das Senden von E -Mails in Laravel fehlschlägt? Wie bekomme ich den Rückgabecode, wenn das Senden von E -Mails in Laravel fehlschlägt? Apr 01, 2025 pm 02:45 PM

Methode zum Abholen des Rücksendecode, wenn das Senden von Laravel -E -Mails fehlschlägt. Wenn Sie Laravel zur Entwicklung von Anwendungen verwenden, stellen Sie häufig Situationen auf, in denen Sie Überprüfungscodes senden müssen. Und in Wirklichkeit ...

Laravel -Zeitplanaufgabe wird nicht ausgeführt: Was soll ich tun, wenn die Aufgabe nicht nach Zeitplan ausgeführt wird: Befehl ausführen? Laravel -Zeitplanaufgabe wird nicht ausgeführt: Was soll ich tun, wenn die Aufgabe nicht nach Zeitplan ausgeführt wird: Befehl ausführen? Mar 31, 2025 pm 11:24 PM

Laravel -Zeitplan -Aufgabe Ausführen nicht reagierende Fehlerbehebung Bei Verwendung der Zeitplanung von Laravel -Zeitplänen werden viele Entwickler auf dieses Problem stoßen: Zeitplan: Run ...

Wie kann man in Laravel mit der Situation umgehen, in der Überprüfungscodes nicht per E -Mail gesendet werden? Wie kann man in Laravel mit der Situation umgehen, in der Überprüfungscodes nicht per E -Mail gesendet werden? Mar 31, 2025 pm 11:48 PM

Die Methode zum Umgang mit Laravels E -Mail -Versagen zum Senden von Verifizierungscode besteht darin, Laravel zu verwenden ...

So implementieren Sie die benutzerdefinierte Tabellenfunktion des Klickens, um Daten im DCAT -Administrator hinzuzufügen? So implementieren Sie die benutzerdefinierte Tabellenfunktion des Klickens, um Daten im DCAT -Administrator hinzuzufügen? Apr 01, 2025 am 07:09 AM

So implementieren Sie die Tabellenfunktion von benutzerdefiniertem Klicken, um Daten in dcatadmin (laravel-admin) hinzuzufügen, wenn Sie DCAT verwenden ...

Laravel – Dump-Server Laravel – Dump-Server Aug 27, 2024 am 10:51 AM

Laravel – Dump-Server – Der Laravel-Dump-Server wird mit der Version von Laravel 5.7 geliefert. Die Vorgängerversionen enthalten keinen Dump-Server. Der Dump-Server wird eine Entwicklungsabhängigkeit in der Laravel-/Laravel-Composer-Datei sein.

Laravel Redis -Verbindungsfreigabe: Warum wirkt sich die Auswahlmethode auf andere Verbindungen aus? Laravel Redis -Verbindungsfreigabe: Warum wirkt sich die Auswahlmethode auf andere Verbindungen aus? Apr 01, 2025 am 07:45 AM

Die Auswirkungen des Austauschs von Redis -Verbindungen im Laravel -Framework und der Auswahl von Methoden bei Verwendung von Laravel -Framework und Redis können Entwickler auf ein Problem stoßen: Durch Konfiguration ...

See all articles