금일 이메일 발송 서버를 개발하다가, 이전에 자주 해 봤음에도 불구하고 2년 조금 넘었다고 많이 헤매는 일이 발생 하였다.
그래서 정말 필요하지만 생각보다 자주 사용하지 않는 코드들을 정리를 해 보려고 한다.
처음으로는 한글때문에 많이 헤맸던 dompdf이다.
dompdf는 HTML file 혹은 source code를 PDF 파일로 변경하여 저장 할 수 있게 해 준다. 현재 버전은 0.8 버전 까지 나온 것 같다.
git repository는 아래이다.
https://github.com/dompdf/dompdf
다만, 최신 버전은 한글 지원을 하도록 설정하기가 굉장히 까다로운 것 같다. 필자는 인코딩 때문에 삽질을 한참 했었었는데, 다음번에는 관련된 문제로 삽질을 하지 않기 위해 적어본다.
일단, dompdf에서 한글지원을 원활하게 하려면 버전은 0.6.* 버전을 설치하는게 좋다.
그중에서 최신은 0.6.2버전이니 0.6.2 버전을 사용했다.
다운로드 경로는
https://github.com/dompdf/dompdf/releases 에서 직접 찾아 다운로드 하거나,
https://github.com/dompdf/dompdf/releases/download/v0.6.2/dompdf-0.6.2.zip 를 이용하여 다운로드 하도록 하자.
그 후, dompdf 문서를 살펴보면 알겠지만 여러가지 php.ini 에서 extension을 열어줘야 한다.
- DOM extension
- GD extension
- MBString extension
다운로드 한 직후 해야 할 작업은, dompdf 에서는 php-font-lib를 사용하나 다운로드 받은 소스코드에는 포함이 되어있지 않다..
https://github.com/PhenX/php-font-lib/releases
위 경로에서 0.2.2버전을 다운로드 하도록 하자.
그 후 dompdf/lib 폴더 안에 php-font-lib 압축 해제한 코드들을 넣어 준다.
소스코드는 아래와 같이 작성한다
include_once('dompdf\dompdf_config.inc.php'); //dompdf_confir.inc.php를 불러워 준다.
$error_level = error_reporting();
error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);
$name = "이름";
$html = "<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
<style>
body { font-family:'NanumGothic', '나눔고딕', 'dotum', '돋움'; font-size: 11px; max-width: 750px !important;}
</style>
</head>
<body>
<div id='pdf_content_wrap'>
PDF 변환 테스트 입니다. $name
</div>
</body>
</html>";
//dompdf 버전 문제로 인한 html 소스 공백 제거
$html = preg_replace('/\r\n|\r|\n/','',$html);
//html 코드를 pdf로 변환 (변경하면 안됨)
$dompdf = new \DOMPDF();
$dompdf->load_html($html);
$dompdf->set_paper("a4");
$dompdf->render();
$dompdf->stream("안녕.pdf"); //저장되는 파일 이름을 설정한다.
error_reporting($error_level);
이상태로도 pdf 파일은 생성되지만, 한글이 깨져 보이는 현상이 발생 한다.
따져보면 폰트 문제인데, 필자는 나눔고딕을 사용하였다.
나눔고딕 글꼴 파일을 dompdf 폴더 안의 load_font.php와 동일한 경로 상에 넣어 준 뒤, 다음과 같은 명령을 리눅스 쉘에서 작성한다.
./load_font.php 'NanumGothic' ./NanumGothic.ttf ./NanumGothic.ttf
권한 문제가 발생한다면, chmod 777 load_font.php를 실행 한 뒤 다시 해보도록 하자.
정상적으로 명령줄이 실행되면 NanumGothic 폰트를 설치했다는 문구가 뜬다.
그 후, 다시 pdf 파일을 생성해보면 한글이 깨짐 없이 깔끔하게 나오게 된다.
중요한 것은, load_font에 글꼴을 추가 하였더라도 html 소스 코드 안에 반드시
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
body { font-family:'NanumGothic', '나눔고딕', 'dotum', '돋움'; font-size: 11px; max-width: 750px !important;}
'PHP > PHP' 카테고리의 다른 글
Laravel - passport를 이용한 로그인 구현 (Oauth) (2) | 2022.05.03 |
---|---|
[Laravel] Laravel + Vue 연동 (0) | 2020.12.15 |
[Laravel] AWS S3 연동하기 및 파일 업로드 구현 (0) | 2019.12.11 |
[PHP Mailer] PHP 메일 발송하기 (0) | 2019.11.27 |
PHP를 이용한 동영상 썸네일 추출 (2) | 2018.03.13 |