Laravel snappy を使用して PDF を生成し、Laravel-admin に統合する方法
#次のチュートリアル列では、Laravel Snappyを使用してPDFを生成し、Laravel-Adminに統合する方法を紹介します。困っている友人に役立つことを願っています。
以前、Python wkhtmltopdf を使用して PDF をエクスポートしたことがあります。wkhtmltopdf は確かに非常に強力です。このツールには多くのページカスタマイズオプションがあり、インターネットから画像を取得して PDF にレンダリングするのに自動的に役立ちます。今回はLaravel-adminにPDFをエクスポートする機能を実装したかったので、プロジェクトhttps://github.com/KnpLabs/snappyをカプセル化した拡張パッケージLaravel snappyを見つけました。 wkhtmltopdf プログラムを呼び出して PDF を生成します。
インストールと構成// 安装扩展包
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
キーでファサード エイリアスを設定します (オプション): <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>&#39;PDF&#39; => Barryvdh\Snappy\Facades\SnappyPdf::class,
&#39;SnappyImage&#39; => Barryvdh\Snappy\Facades\SnappyImage::class,</pre><div class="contentsignin">ログイン後にコピー</div></div>
最後にリソース ファイルを公開します: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>php artisan vendor:publish --provider="Barryvdh\Snappy\ServiceProvider"</pre><div class="contentsignin">ログイン後にコピー</div></div>
in
ファイルに追加します:
WKHTML_PDF_BINARY=/usr/local/bin/wkhtmltopdf-amd64 WKHTML_IMG_BINARY=/usr/local/bin/wkhtmltoimage-amd64
次に、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' => [], ],
Use
レンダリング ブレード テンプレートを読み込んで PDF を生成する: $pdf = PDF::loadView('pdf.invoice', $data); //pdf.invoice是你的blade模板
return $pdf->download('invoice.pdf');
return PDF::loadFile('http://www.github.com')->inline('github.pdf');
HTML を通じて生成し、さまざまな設定を行って保存する:
PDF::loadHTML($html)->setPaper('a4')->setOrientation('landscape')->setOption('margin-bottom', 0)->save('myfile.pdf') // 更多选项可查看wkhtmltopdf的手册:https://wkhtmltopdf.org/usage/wkhtmltopdf.txt
Laravel-admin エクスポート関数の変換
Laravel-admin のデフォルトのエクスポート形式は csv ですが、ここでは目的の PDF 形式に変換します。 。
Laravel 管理者のエクスポート原理の簡単な分析エクスポート ボタンを見ると、次の 3 つのエクスポート エントリの形式を取得できます。 :http://hostname/posts?_export_=all // 导出全部
http://hostname/posts?_export_=page%3A1 // 导出当前页
http://hostname/posts?_export_=selected%3A1 // 导出选定的行
である必要があります。ここから、
/vendor/encore/laravel-admin/src/Grid.php にあります。 :<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>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();}</pre><div class="contentsignin">ログイン後にコピー</div></div>
URL に _export=... パラメータがある場合、$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(); // 这里将调用某个类的export方法 }}
最も重要なことは、export
メソッドです。
クラスを継承する新しいクラスを作成して、必要なエクスポート ロジックを実装します。さらに、getExporter
メソッドを見てください: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>protected function getExporter($scope){
return (new Exporter($this))->resolve($this->exporter)->withScope($scope);}</pre><div class="contentsignin">ログイン後にコピー</div></div>
また、サブクラスの withScope
を書き換えて、パラメーター設定とインターセプトを実行することもできます。
基本原則を理解し、Laravel 管理ドキュメントを参照した後、エクスポート関数の変更を開始できます。 。 まず、
app/Admin/Extensions/PdfExporter.phpなどの拡張機能を作成します。コードは次のように実装されます。
<?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; } }
次に、 でapp/Admin/ 拡張機能を bootstrap.php
に登録します:
Exporter::extend('pdf-exporter', PdfExporter::class);
最後に、それを Grid
メソッドで使用します:
protected function grid(){ // 其他逻辑... // 添加导出PDF的扩展 $grid->exporter('pdf-exporter'); return $grid;}
このようにして、エクスポート ボタンをクリックすると、PDF を今すぐダウンロードできます。
ブレード テンプレート内の css および js アドレスは完全な URL アドレスである必要があるため、mix( 'css/app.css')
を- asset('css/app.css')
-
に変更する必要があります。画像アドレス (エラーが発生しにくくなります)
最後に、レンダリングを投稿します:
以上がLaravel snappy を使用して PDF を生成し、Laravel-admin に統合する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Laravel - アーティザン コマンド - Laravel 5.7 には、新しいコマンドを処理およびテストするための新しい方法が付属しています。これには職人コマンドをテストする新しい機能が含まれており、そのデモについては以下で説明します。

Laravel - ページネーションのカスタマイズ - Laravel には、ユーザーまたは開発者がページネーション機能を組み込むのに役立つページネーションの機能が含まれています。 Laravel ページネーターは、クエリ ビルダーおよび Eloquent ORM と統合されています。自動ページネーションメソッド

Laravelの電子メールの送信が失敗したときに戻りコードを取得する方法。 Laravelを使用してアプリケーションを開発する場合、検証コードを送信する必要がある状況に遭遇することがよくあります。そして実際には...

LaravelスケジュールタスクRAN RANSPONSIVEトラブルシューティングRALAVELのスケジュールタスクスケジューリングを使用すると、多くの開発者がこの問題に遭遇します。スケジュール:実行...

Laravelの電子メールの検証コードの送信の障害を処理する方法は、Laravelを使用することです...

DCATを使用するときにDCATADMIN(Laravel-Admin)にデータを追加するためにカスタムクリックのテーブル関数を実装する方法...

Laravel - ダンプサーバー - Laravel ダンプサーバーには、Laravel 5.7 のバージョンが付属しています。以前のバージョンにはダンプ サーバーが含まれていません。ダンプサーバーはlaravel/laravelコンポーザーファイルの開発依存関係になります。

Laravel FrameworkでRedis接続の共有の影響とLaravelフレームワークとRedisを使用する際のメソッドを選択すると、開発者は問題に遭遇する可能性があります。
