diff --git a/app/Services/HR/PayrollService.php b/app/Services/HR/PayrollService.php index c9118859..c68ce657 100644 --- a/app/Services/HR/PayrollService.php +++ b/app/Services/HR/PayrollService.php @@ -879,12 +879,7 @@ public function sendPayslip(int $id): ?array // PDF 생성 (한글 폰트를 동일 인스턴스에 등록) $month = str_pad($payslipData['pay_month'], 2, '0', STR_PAD_LEFT); $pdf = Pdf::loadView('emails.payslip', ['payslipData' => $payslipData]) - ->setPaper('a4') - ->setOptions([ - 'font_dir' => storage_path('fonts'), - 'font_cache' => storage_path('fonts'), - 'enable_font_subsetting' => true, - ]); + ->setPaper('a4'); $this->registerKoreanFont($pdf); $pdfContent = $pdf->output(); $fileName = "{$payslipData['pay_year']}년{$month}월_급여명세서_{$payslipData['employee_name']}.pdf"; @@ -905,47 +900,34 @@ public function sendPayslip(int $id): ?array /** * PDF 인스턴스에 한글(Pretendard) 폰트 등록 + * * - render() 전에 동일 DomPDF 인스턴스에 등록해야 적용됨 - * - 폰트 원본은 resources/fonts/에 프로젝트와 함께 배포 + * - resource_path() 원본을 직접 전달 (storage symlink는 chroot 밖이라 차단됨) + * - DomPDF가 내부적으로 font_dir에 복사 + .ufm 메트릭 생성 */ private function registerKoreanFont(\Barryvdh\DomPDF\PDF $pdf): void { - $fontDir = storage_path('fonts'); - if (! is_dir($fontDir)) { - mkdir($fontDir, 0755, true); - } - - // 프로젝트에 포함된 폰트 (Git으로 배포됨) - $fontSources = [ - 'normal' => resource_path('fonts/Pretendard-Regular.ttf'), - 'bold' => resource_path('fonts/Pretendard-Bold.ttf'), - ]; - - if (! file_exists($fontSources['normal'])) { + $normalFont = resource_path('fonts/Pretendard-Regular.ttf'); + if (! file_exists($normalFont)) { return; } - // storage/fonts/에 복사 - foreach ($fontSources as $weight => $src) { - $dst = $fontDir.'/'.basename($src); - if (! file_exists($dst)) { - copy($src, $dst); - } - } - - // 동일 DomPDF 인스턴스에 폰트 등록 (핵심: $pdf->getDomPDF()) $dompdf = $pdf->getDomPDF(); $fm = $dompdf->getFontMetrics(); + $fm->registerFont( ['family' => 'pretendard', 'style' => 'normal', 'weight' => 'normal'], - $fontDir.'/Pretendard-Regular.ttf' + $normalFont ); - if (file_exists($fontDir.'/Pretendard-Bold.ttf')) { + + $boldFont = resource_path('fonts/Pretendard-Bold.ttf'); + if (file_exists($boldFont)) { $fm->registerFont( ['family' => 'pretendard', 'style' => 'normal', 'weight' => 'bold'], - $fontDir.'/Pretendard-Bold.ttf' + $boldFont ); } + $fm->saveFontFamilies(); }