本文翻譯自https://laravelcode.com/post/html-to-pdf-in-laravel-using-barryvdh-laravel-snappy,英語好的請移步原文。
今天,laravel code教你如何在laravel中使用barryvdh/laravel-snappy包把HTML轉換成PDF。最近在用Laravel的應用中集成了barryvdh/laravel-snappy包,通過HTML生成PDF,但是遇到了一些問題。在Google后,改變一些配置,最終實現。所以寫這篇教程幫助疑惑者。
首先分享給你開發時遇到的一些問題。你是否通過這個包HTML生成PDF?按照以下步驟走就可以。
步驟一:引入包依賴
安裝barryvdh/laravel-snappy前,必須引入包的依賴。需要運行以下命令引入兩個依賴。
注意:如果是32位的linux系統使用以下命令:
$ composer require h4cc/wkhtmltopdf-i386 0.12.x
$ composer require h4cc/wkhtmltoimage-i386 0.12.x
注意:如果是64位的linux系統使用以下命令:
$ composer require h4cc/wkhtmltopdf-amd64 0.12.x
$ composer require h4cc/wkhtmltoimage-amd64 0.12.x
注意:非Linux系統,請到wkhtmlto*官網自行下載后放到指定目錄。
步驟二:引入barryvdh/laravel-snappy包
安裝完兩個依賴后,繼續運行以下命令安裝HTML生成PDF的包:
composer require barryvdh/laravel-snappy
步驟3:配置文件
安裝包成功后,在config/app.php文件中配置service providers和aliaces
'providers' => [
....
Barryvdh\Snappy\ServiceProvider::class,
],
'aliases' => [
....
'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,
'SnappyImage' => Barryvdh\Snappy\Facades\SnappyImage::class,
],
在vendor文件夾發布的目錄運行以下命令:
php artisan vendor:publish --provider="Barryvdh\Snappy\ServiceProvider"
After install package, configure and publish it vendor then we have required some most important changes. if you don't change it is and forgot then you got following error message when you try to generate HTML to PDF. so, it must be required for all.
步驟四:4個引入改變
安裝完包后,配置並發布已經引入了很多的改變vendor目錄。如果忘記發布就會得到以下錯誤信息。
The exit status code '127' says something went wrong:
stderr: "sh: 1: /usr/local/bin/wkhtmltopdf: not found
You all are remember we have also install two dependancy for it. ones you check in your vendor folder then you found this path vendor/h4cc/wkhtmltoimage-amd64/bin/wkhtmltoimage-amd64 and another is vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64 so, we have required copy wkhtmltoimage-amd64 and wkhtmltopdf-amd64 folder in this path /usr/local/bin/ simply run following command for it.
還記得安裝了兩個依賴吧。在vendor目錄中可以找到一個是vendor/h4cc/wkhtmltoimage-amd64/bin/wkhtmltoimage-amd64,另一個是vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64。然后把它們拷貝到/usr/local/bin以便運行。
注意:改變兩個文件夾到777權限
cp vendor/h4cc/wkhtmltoimage-amd64/bin/wkhtmltoimage-amd64 /usr/local/bin/
cp vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64 /usr/local/bin/
Now open your config/snappy.php file and changes in it bith of 'binary' array key following way
打開config/snappy.php文件,按照以下方式更改數組key為binary的值
return array(
'pdf' => array(
'enabled' => true,
'binary' => '/usr/local/bin/wkhtmltopdf-amd64',
'timeout' => false,
'options' => array(),
'env' => array(),
),
'image' => array(
'enabled' => true,
'binary' => '/usr/local/bin/wkhtmltoimage-amd64',
'timeout' => false,
'options' => array(),
'env' => array(),
),
);
步驟五:創建路由
以上配置完后,在routes/web.php文件創建以下路由:
Route::get('generate-pdf', 'PdfGenerateController@pdfview')->name('generate-pdf');
步驟四:創建控制器
namespace App\Http\Controllers;
use App\Http\Requests;
use Illuminate\Http\Request;
use DB;
use PDF;
class PdfGenerateController extends Controller
{
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function pdfview(Request $request)
{
$users = DB::table("users")->get();
view()->share('users',$users);
if($request->has('download')) {
// pass view file
$pdf = PDF::loadView('pdfview');
// download pdf
return $pdf->download('userlist.pdf');
}
return view('pdfview');
}
}
步驟五:創建視圖
現在可以在resources/views/創建一個簡單的blade文件,如pdfview.blade.php。通過以下html布局實現pdf轉換。
<!DOCTYPE html>
<html>
<head>
<title>User list - PDF</title>
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<a href="{{ route('generate-pdf',['download'=>'pdf']) }}">Download PDF</a>
<table class="table table-bordered">
<thead>
<th>Name</th>
<th>Email</th>
</thead>
<tbody>
@foreach ($users as $key => $value)
<tr>
<td>{{ $value->name }}</td>
<td>{{ $value->email }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</body>
</html>
現在通過運行以下命令可以運行本例了:
php artisan serve
現在可以在瀏覽器打開以下鏈接了:
如果你有任何問題或者改進意見可以留言。謝謝。。。