Thực hiện chức năng xuất PDF danh sách Sản phẩm (pdf)
Cài đặt thư viện xuất PDF
composer require barryvdh/laravel-dompdf
Mô hình hoạt động của pdf:
Step 1: tạo route xuất PDF Danh mục sản phẩm
- Hiệu chỉnh file
routes/web.php
Route::get('/admin/danhsachsanpham/pdf', 'Backend\SanPhamController@pdf')->name('danhsachsanpham.pdf');
Step 2: tạo nút nhấn `Xuất PDF` trên giao diện index:
- Hiệu chỉnh file `resources/views/sanpham/index.blade.php`
<!-- Tạo nút Xuất PDF danh sách sản phẩm
- Theo quy ước, các route đã được đăng ký trong file `web.php` đều phải được đặt tên để dễ dàng bảo trì code sau này.
- Đường dẫn URL là đường dẫn được tạo ra bằng route có tên `danhsachsanpham.pdf`
- Sẽ có dạng http://tenmiencuaban.com/admin/danhsachsanpham/pdf
-->
<a href="{{ route('danhsachsanpham.pdf') }}" class="btn btn-primary">Xuất PDF</a>
Step 3: viết code action
Viết code cho action pdf() :
- Action
pdf() dùng để lấy danh sách sản phẩm có trong table sanpham và xuất thành file PDF "*.pdf" cho người dùng download về.
Hiệu chỉnh file app\Http\Controllers\SanphamController.php
use Barryvdh\DomPDF\Facade as PDF;
/**
* Action xuất PDF
*/
public function pdf()
{
$ds_sanpham = Sanpham::all();
$ds_loai = Loai::all();
$data = [
'danhsachsanpham' => $ds_sanpham,
'danhsachloai' => $ds_loai,
];
/* Code dành cho việc debug
- Khi debug cần hiển thị view để xem trước khi Export PDF
*/
// return view('backend.sanpham.pdf')
// ->with('danhsachsanpham', $ds_sanpham)
// ->with('danhsachloai', $ds_loai);
$pdf = PDF::loadView('backend.sanpham.pdf', $data);
return $pdf->download('DanhMucSanPham.pdf');
}
Tạo view pdf.blade.php
- Để dễ dàng quản lý các view, ta sẽ tạo 1 thư mục tương ứng với tên Controller, mỗi action sẽ tương ứng với tên view.
- Tạo folder
resources/views/backend/sanpham
- Tạo file
resources/views/backend/sanpham/pdf.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Danh sách sản phẩm</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
* {
font-family: DejaVu Sans, sans-serif;
}
body {
font-size: 10px;
}
table {
border-collapse: collapse;
}
td {
vertical-align: middle;
}
caption {
font-size: 20px;
font-weight: bold;
text-align: center;
}
.hinhSanPham {
width: 100px;
height: 100px;
}
.companyInfo {
font-size: 13px;
font-weight: bold;
text-align: center;
}
.companyImg {
width: 200px;
height: 200px;
}
.page-break {
page-break-after: always;
}
</style>
</head>
<body>
<div class="row">
<table border="0" align="center">
<tr>
<td class="companyInfo">
Công ty Nền tảng<br />
http://sunshine.com/<br />
(0292)3.888.999 # 01.222.888.999<br />
<img src="{{ asset('img/logo-nentang.jpg') }}" class="companyImg" />
</td>
</tr>
</table>
<br />
<br />
<?php
$tongSoTrang = ceil(count($danhsachsanpham)/5);
?>
<table border="1" align="center" cellpadding="5">
<caption>Danh sách sản phẩm</caption>
<tr>
<th colspan="6" align="center">Trang 1 / {{ $tongSoTrang }}</th>
</tr>
<tr>
<th>STT</th>
<th>Hình sản phẩm</th>
<th>Tên sản phẩm</th>
<th>Giá gốc</th>
<th>Giá bán</th>
<th>Loại sản phẩm</th>
</tr>
@foreach ($danhsachsanpham as $sp)
<tr>
<td align="center">{{ $loop->index + 1 }}</td>
<td align="center">
<img class="hinhSanPham" src="{{ asset('storage/photos/' . $sp->sp_hinh) }}" />
</td>
<td align="left">{{ $sp->sp_ten }}</td>
<td align="right">{{ $sp->sp_giaGoc }}</td>
<td align="right">{{ $sp->sp_giaBan }}</td>
@foreach ($danhsachloai as $l)
@if ($sp->l_ma == $l->l_ma)
<td align="left">{{ $l->l_ten }}</td>
@endif
@endforeach
</tr>
@if (($loop->index + 1) % 5 == 0)
</table>
<div class="page-break"></div>
<table border="1" align="center" cellpadding="5">
<tr>
<th colspan="6" align="center">Trang {{ 1 + floor(($loop->index + 1) / 5) }} / {{ $tongSoTrang }}</th>
</tr>
<tr>
<th>STT</th>
<th>Hình sản phẩm</th>
<th>Tên sản phẩm</th>
<th>Giá gốc</th>
<th>Giá bán</th>
<th>Loại sản phẩm</th>
</tr>
@endif
@endforeach
</table>
</div>
</body>
</html>
|