Laravel 7과 Snappy로 PDF 출력
11290 단어 라라벨PDFLaravel-Snappy
소개
Laravel에서 PDF를 출력하는 방법입니다.
완성판의 소스는 아래에 있습니다.
htps : // 기주 b. 이 m / naga 3 / s py py mp ぇ
Laravel에서 사용할 수 있는 PDF 출력 라이브러리
Puppeteer 사용
DOMPDF 의 Laravel 래퍼
이번에는 균형을 생각하고 Laravel Snappy를 선택했습니다.
Laravel 프로젝트 만들기
이쪽을 참고로 적당한 프로젝트를 작성합니다. Composer이 설치되어 있으면 쉽게 만들 수 있습니다.
composer create-project --prefer-dist laravel/laravel snappy-sample
cd snappy-sample
Laravel Snappy 설치
Laravel Snappy의 문서을보고 진행하십시오.
우선 wkhtmltopdf를 설치합니다만, 이쪽도 Composer로 간단하게 도입할 수 있습니다. Windows 또는 Mac과 같은 바이너리가 적합하지 않은 경우 위 문서를 참조하십시오.
composer require h4cc/wkhtmltopdf-amd64 0.12.x
그런 다음 Laravel Snappy 본체를 설치합니다.
composer require barryvdh/laravel-snappy
config 파일을 만듭니다.
php artisan vendor:publish --provider="Barryvdh\Snappy\ServiceProvider"
config 파일에 wkhtmltopdf 위치를 씁니다. 위와 같이 Composer에서 설치한 경우
config/snappy.php
'binary' => base_path('vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64'),
PDF 출력 테스트
성공적으로 설치할 수 있는지 확인해 봅니다.
routes/web.php
Route::get('/hello', function () {
return PDF::loadHTML('<h1>Hello!</h1>')->inline();
});
괜찮아 보이네요.
Blade를 사용하여 PDF를 출력합니다.
Snappy는 Blade에 그대로 HTML을 써서 출력할 수 있으므로 매우 편합니다. CSS도 2 정도 지금은 정확하게 효과가 있습니다.
우선 Route의 부분입니다.
routes/web.php
Route::get('/members', function () {
$member = Faker\Factory::create('ja_JP');
return PDF::loadView('members', compact('member'))->inline();
});
Faker에서 무작위 데이터를 생성하고 view에 전달합니다.
다음 템플릿의 부분입니다.
resources/views/members.blade.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>名簿</title>
<style>
table {
border-collapse: collapse;
}
tr {
page-break-inside: avoid;
}
th,
td {
border: 1px solid black;
}
</style>
</head>
<body>
<h1>名簿</h1>
<table>
<tr>
<th>No.</th>
<th>氏名</th>
<th>住所</th>
<th>電話番号</th>
<th>備考</th>
@for ($no = 1; $no <= 50; $no++) <tr>
<td>{{ $no }}</td>
<td style="white-space: nowrap">{{ $member->name }}</td>
<td>{{ $member->address }}</td>
<td>{{ $member->phoneNumber }}</td>
<td>{{ $member->realText }}</td>
</tr>
@endfor
</table>
</body>
</html>
브라우저에서 확인해 봅니다.
좋아 보인다.
tr 요소에
page-break-inside: avoid;
를 적용하면 셀 중간에 페이지 나누기가 중단됩니다.이런 느낌.
Reference
이 문제에 관하여(Laravel 7과 Snappy로 PDF 출력), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/naga3/items/3b65a39e235b8bd26f4a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)