fix: [esign] 운영서버 PDF 미리보기 필드값 누락 수정

- TCPDF K_PATH_FONTS를 storage/fonts/tcpdf/로 설정하여 vendor 쓰기 권한 문제 해결
- 사전 생성된 Pretendard 폰트 정의 파일 포함 (런타임 생성 불필요)
- downloadDocument() 에러 로깅 상세화 (trace 포함)
This commit is contained in:
김보곤
2026-02-27 16:58:53 +09:00
parent 3f27c2f7c0
commit e35fbb26ff
6 changed files with 59 additions and 5 deletions

View File

@@ -12,9 +12,21 @@ class PdfSignatureService
{
private ?string $koreanFontName = null;
public function __construct()
{
// TCPDF 클래스 로드 전에 K_PATH_FONTS를 쓰기 가능한 디렉토리로 설정
// (운영서버에서 vendor/tecnickcom/tcpdf/fonts/ 쓰기 권한 없는 문제 방지)
if (! defined('K_PATH_FONTS')) {
$tcpdfFontsDir = dirname(__DIR__, 3).'/storage/fonts/tcpdf/';
if (is_dir($tcpdfFontsDir)) {
define('K_PATH_FONTS', $tcpdfFontsDir);
}
}
}
/**
* Pretendard 한글 폰트를 등록하고 폰트 이름을 반환한다.
* PDF 문서와 동일한 폰트로 필드 텍스트를 렌더링하여 일관성을 유지한다.
* 사전 생성된 폰트 정의 파일이 storage/fonts/tcpdf/에 있으면 바로 사용한다.
*/
private function getKoreanFont(): string
{
@@ -22,11 +34,21 @@ private function getKoreanFont(): string
return $this->koreanFontName;
}
// 1순위: 프로젝트 내장 Pretendard (로컬/서버 공통)
$fontPath = storage_path('fonts/Pretendard-Regular.ttf');
// 사전 생성된 폰트 정의 파일이 K_PATH_FONTS에 있으면 바로 사용
if (defined('K_PATH_FONTS') && file_exists(K_PATH_FONTS.'pretendard.php')) {
$this->koreanFontName = 'pretendard';
return $this->koreanFontName;
}
// 폴백: TTF에서 런타임 생성 시도
$fontPath = storage_path('fonts/Pretendard-Regular.ttf');
if (file_exists($fontPath)) {
$this->koreanFontName = \TCPDF_FONTS::addTTFfont($fontPath, 'TrueTypeUnicode', '', 96);
try {
$this->koreanFontName = \TCPDF_FONTS::addTTFfont($fontPath, 'TrueTypeUnicode', '', 96);
} catch (\Throwable $e) {
Log::warning('TCPDF 한글 폰트 등록 실패', ['error' => $e->getMessage()]);
}
}
return $this->koreanFontName ?: 'helvetica';