PDF 견적서, 계약서, 보고서 자동 생성이 필요하신가요? PHP에서도 충분히, 그리고 멋지게 할 수 있습니다.
안녕하세요! 실무에서 가장 많이 요청받는 기능 중 하나가 바로 ‘PDF 자동 생성’이에요. 예전엔 워드나 수동 출력이 많았지만, 요즘은 클릭 한 번으로 PDF 출력이 기본입니다. PHP에서도 충분히 강력하게 PDF를 다룰 수 있어요. 이 글에서는 가장 많이 사용되는 mpdf
와 dompdf
두 가지 라이브러리를 중심으로 설치부터 PDF 생성, 한글 폰트 설정, HTML 스타일링까지 실전 예제로 정리해드릴게요. PDF가 필요한 모든 상황에 대비할 수 있도록, 쉽게 따라올 수 있게 구성했습니다.
목차
1. PHP PDF 라이브러리 소개: mPDF vs dompdf
PHP에서 PDF 생성을 위한 대표 라이브러리는 mPDF
와 dompdf
입니다. 둘 다 HTML 기반으로 PDF를 만들어주지만, 약간의 차이가 있어요.
라이브러리 | 특징 |
---|---|
mPDF | 빠르고 강력하며, 한글 지원이 뛰어남 |
dompdf | CSS 호환이 좋고 HTML 렌더링에 강점 |
간단하게 견적서, 레이아웃 기반 출력이라면 mPDF, 정교한 CSS가 필요하다면 dompdf를 추천드립니다.
2. 설치 및 기본 PDF 출력 예제
composer
를 이용해 아래 명령어로 설치하세요.
// mPDF 설치
composer require mpdf/mpdf
// dompdf 설치
composer require dompdf/dompdf
아래는 mPDF를 이용해 PDF를 생성하는 기본 예제입니다.
require_once __DIR__ . '/vendor/autoload.php';
$mpdf = new \Mpdf\Mpdf();
$mpdf->WriteHTML('<h1>안녕하세요, PDF입니다!</h1>');
$mpdf->Output('example.pdf', 'I'); // 'I'는 브라우저 출력
Output()
함수의 두 번째 인자에 따라 브라우저 표시(I), 다운로드(D), 파일 저장(F)을 선택할 수 있습니다.
- I: 브라우저 내 표시
- D: 즉시 다운로드
- F: 서버에 저장
이제 기본 PDF는 준비 끝! 다음 단계에서 HTML 스타일을 추가하고 실전 문서처럼 꾸며볼게요.
3. HTML과 CSS로 PDF 스타일링하기
mPDF나 dompdf 모두 HTML 기반이라서 웹 페이지를 꾸미듯 PDF도 스타일링할 수 있어요. 다만 모든 CSS 속성이 지원되는 건 아니니 기본적인 스타일 위주로 구성하는 것이 좋아요.
$html = '
<style>
body { font-family: sans-serif; font-size: 14px; }
h1 { color: #4a148c; }
table { width: 100%; border-collapse: collapse; }
th, td { border: 1px solid #ccc; padding: 8px; }
th { background: #f3e5f5; }
</style>
<h1>주문 내역서</h1>
<table>
<thead>
<tr><th>상품명</th><th>수량</th><th>금액</th></tr>
</thead>
<tbody>
<tr><td>책상</td><td>2</td><td>150,000원</td></tr>
<tr><td>의자</td><td>4</td><td>240,000원</td></tr>
</tbody>
</table>
';
$mpdf = new \Mpdf\Mpdf();
$mpdf->WriteHTML($html);
$mpdf->Output();
폰트, 컬러, 표, 간격 등 대부분의 기본 CSS는 적용 가능하며, 인라인 스타일도 유용하게 활용할 수 있어요. 실제 견적서나 배송서 양식을 구현할 수 있을 만큼 충분히 강력합니다.
4. 한글 폰트 설정 및 인코딩 문제 해결
mPDF는 기본적으로 한글을 잘 지원하지만, 원하는 스타일의 폰트를 적용하려면 약간의 설정이 필요해요. 아래는 나눔고딕 폰트를 사용하는 방법입니다.
// config.php에서 한글 폰트 추가 설정
$defaultConfig = (new Mpdf\Config\ConfigVariables())->getDefaults();
$fontDirs = $defaultConfig['fontDir'];
$defaultFontConfig = (new Mpdf\Config\FontVariables())->getDefaults();
$fontData = $defaultFontConfig['fontdata'];
$mpdf = new \Mpdf\Mpdf([
'fontDir' => array_merge($fontDirs, [__DIR__ . '/fonts']),
'fontdata' => $fontData + [
'nanumgothic' => [
'R' => 'NanumGothic-Regular.ttf',
'B' => 'NanumGothic-Bold.ttf',
]
],
'default_font' => 'nanumgothic'
]);
- 폰트 파일(.ttf)은 직접 프로젝트에 추가
fontDir
에 경로 지정default_font
설정으로 전역 적용
이렇게 하면 한글도 깨지지 않고, 전체 문서가 깔끔한 스타일로 출력돼요. 계약서나 증명서 같은 문서에 꼭 필요한 설정입니다.
정적인 문서(견적서, 계약서 등)에선 mPDF가 속도와 한글 지원에서 강점을 보입니다. CSS 디테일과 HTML 레이아웃에 더 신경 쓴다면 dompdf가 유리해요. 상황에 따라 적절히 선택하세요.
$mpdf->Output('filename.pdf', 'D');
를 사용하면 저장 없이 브라우저에서 바로 다운로드 됩니다. 'I'는 브라우저에서 보기, 'F'는 서버 저장이에요.
Output('파일명.pdf', 'D')
로 바로 다운로드 처리!기본적인 스타일은 대부분 적용되지만, mPDF는 일부 최신 CSS 속성이나 JS는 지원하지 않아요. layout은 float, table, inline-block 정도로 구성하는 게 가장 안정적입니다.
폰트가 없거나 인코딩이 UTF-8이 아닐 가능성이 큽니다. default_font
를 nanumgothic
같은 한글 지원 폰트로 설정하고, HTML과 PHP 파일 모두 UTF-8로 저장하세요.
가능하지만 기본적으로는 지원하지 않아서 폰트를 직접 추가해야 합니다. font-family
로 원하는 TTF 폰트를 등록하고 load_font.php
유틸을 활용하면 해결돼요.
처음 PDF 기능을 구현하려고 했을 때는 ‘이걸 PHP로 할 수 있을까?’ 하는 생각이 들었어요. 하지만 mPDF를 사용해 첫 견적서를 만들고, dompdf로 이력서를 출력해봤을 때, PDF는 그저 HTML의 또 다른 표현이라는 걸 느꼈습니다. 특히 한글 폰트 세팅이나 테이블 레이아웃을 한 줄 한 줄 완성해나갈 때마다 완성도가 높아지는 느낌이 정말 뿌듯하더라고요. 지금 이 글을 읽고 계신 여러분도 하나하나 실습해보신다면 곧 실무에서 견적서, 주문서, 계약서 자동화를 완벽히 구현하실 수 있을 거예요. 어렵게 느껴졌던 PDF, 이제 더 이상 두렵지 않으시죠? 😎
'💻 쇼핑몰 자동화 & 웹 개발 가이드' 카테고리의 다른 글
[PHP API] REST API란? PHP로 구현하는 실전 예제 (7) | 2025.04.24 |
---|---|
[PHP API] REST API 만들기 입문: JSON, HTTP 메서드 (12) | 2025.04.23 |
[PHP 입문] 엑셀 파일 처리: 읽기, 쓰기, 업로드까지 (9) | 2025.04.21 |
[PHP 입문] 이미지 처리: 업로드, 썸네일, 워터마크까지 (25) | 2025.04.18 |
[PHP 입문] PHP 이메일 발송 마스터 가이드 (14) | 2025.04.17 |