Files
sam-manage/resources/views/emails/payslip.blade.php
김보곤 d7428e1785 fix: [payroll] PDF 한글 폰트 NanumGothic → Pretendard 전환
- 운영서버 NanumGothic 메트릭 생성 실패 문제 해결
- Pretendard Regular/Bold TTF를 resources/fonts/에 번들링
- ensureKoreanFont()에서 Pretendard 등록으로 변경
- payslip.blade.php font-family를 Pretendard로 변경
- PDF 크기: 18KB (서브셋팅 적용)
2026-03-11 11:49:20 +09:00

117 lines
5.2 KiB
PHP

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<style>
body { font-family: 'Pretendard', 'Malgun Gothic', sans-serif; margin: 0; padding: 20px; background: #fff; }
.container { max-width: 720px; margin: 0 auto; background: #fff; padding: 40px 36px; }
h1 { text-align: center; font-size: 22px; font-weight: bold; letter-spacing: 2px; margin: 0 0 28px; border-bottom: 3px solid #333; padding-bottom: 16px; }
.info-table { width: 100%; border-collapse: collapse; margin-bottom: 20px; table-layout: fixed; }
.info-table td { padding: 6px 8px; font-size: 12px; border: 1px solid #999; overflow: hidden; }
.info-table .label { font-weight: bold; background: #f0f0f0; text-align: center; }
.payslip-table { width: 100%; border-collapse: collapse; margin-bottom: 0; }
.payslip-table th, .payslip-table td { border: 1px solid #999; padding: 7px 12px; font-size: 13px; }
.payslip-table th { background: #e8e8e8; font-weight: 700; text-align: center; letter-spacing: 4px; }
.payslip-table .item-name { text-align: center; }
.payslip-table .item-amount { text-align: right; }
.payslip-table .total-row td { font-weight: 700; background: #f8f8f8; }
.payslip-table .net-row td { font-weight: bold; font-size: 14px; background: #f0f7ff; }
.footer-table { width: 100%; margin-top: 20px; padding-top: 12px; border: none; }
.footer-table td { font-size: 12px; color: #666; border: none; padding: 0; }
</style>
</head>
<body>
<div class="container">
<h1>{{ $payslipData['pay_year'] }}{{ str_pad($payslipData['pay_month'], 2, '0', STR_PAD_LEFT) }}월분 급여명세서</h1>
{{-- 사원 정보 --}}
<table class="info-table">
<colgroup>
<col style="width: 13%;">
<col style="width: 20%;">
<col style="width: 13%;">
<col style="width: 20%;">
<col style="width: 13%;">
<col style="width: 21%;">
</colgroup>
<tr>
<td class="label">사원코드</td>
<td>{{ $payslipData['employee_code'] ?? '-' }}</td>
<td class="label">사원명</td>
<td>{{ $payslipData['employee_name'] ?? '-' }}</td>
<td class="label">입사일</td>
<td>{{ $payslipData['hire_date'] ?? '-' }}</td>
</tr>
<tr>
<td class="label">부서</td>
<td>{{ $payslipData['department'] ?? '-' }}</td>
<td class="label">직급</td>
<td>{{ $payslipData['position'] ?? '-' }}</td>
<td class="label">호봉</td>
<td>{{ $payslipData['grade'] ?? '-' }}</td>
</tr>
</table>
{{-- 지급/공제 내역 --}}
@php
$payments = $payslipData['payments'] ?? [];
$deductionItems = $payslipData['deduction_items'] ?? [];
$maxRows = max(count($payments), count($deductionItems));
@endphp
<table class="payslip-table">
<thead>
<tr>
<th style="width: 25%;"> </th>
<th style="width: 25%;"> </th>
<th style="width: 25%;"> </th>
<th style="width: 25%;"> </th>
</tr>
</thead>
<tbody>
@for($i = 0; $i < $maxRows; $i++)
<tr>
<td class="item-name">{{ $payments[$i]['name'] ?? '' }}</td>
<td class="item-amount">{{ isset($payments[$i]['amount']) ? number_format($payments[$i]['amount']) : '' }}</td>
<td class="item-name">{{ $deductionItems[$i]['name'] ?? '' }}</td>
<td class="item-amount">{{ isset($deductionItems[$i]['amount']) ? number_format($deductionItems[$i]['amount']) : '' }}</td>
</tr>
@endfor
{{-- (최소 높이 확보) --}}
@for($i = $maxRows; $i < 8; $i++)
<tr>
<td class="item-name">&nbsp;</td>
<td class="item-amount"></td>
<td class="item-name"></td>
<td class="item-amount"></td>
</tr>
@endfor
{{-- 공제액계 --}}
<tr class="total-row">
<td class="item-name"></td>
<td class="item-amount"></td>
<td class="item-name" style="font-weight: 700; letter-spacing: 4px;"> </td>
<td class="item-amount">{{ number_format($payslipData['total_deductions'] ?? 0) }}</td>
</tr>
{{-- 지급액계 / 차인지급액 --}}
<tr class="net-row">
<td class="item-name" style="letter-spacing: 4px;"> </td>
<td class="item-amount">{{ number_format($payslipData['gross_salary'] ?? 0) }}</td>
<td class="item-name" style="letter-spacing: 2px;">차인지급액</td>
<td class="item-amount">{{ number_format($payslipData['net_salary'] ?? 0) }}</td>
</tr>
</tbody>
</table>
<table class="footer-table">
<tr>
<td style="text-align: left;">귀하의 노고에 감사드립니다.</td>
<td style="text-align: right;">()코드브릿지엑스(CodebridgeX)</td>
</tr>
</table>
</div>
</body>
</html>