JJONG`sFACTORY
반응형

금일 이메일 발송 서버를 개발하다가, 이전에 자주 해 봤음에도 불구하고 2년 조금 넘었다고 많이 헤매는 일이 발생 하였다.

 

그래서 정말 필요하지만 생각보다 자주 사용하지 않는 코드들을 정리를 해 보려고 한다.

 

처음으로는 한글때문에 많이 헤맸던 dompdf이다.

 

dompdf는 HTML file 혹은 source code를 PDF 파일로 변경하여 저장 할 수 있게 해 준다. 현재 버전은 0.8 버전 까지 나온 것 같다.

 

git repository는 아래이다.

https://github.com/dompdf/dompdf

 

dompdf/dompdf

HTML to PDF converter (PHP5). Contribute to dompdf/dompdf development by creating an account on GitHub.

github.com

 

 

다만, 최신 버전은 한글 지원을 하도록 설정하기가 굉장히 까다로운 것 같다. 필자는 인코딩 때문에 삽질을 한참 했었었는데, 다음번에는 관련된 문제로 삽질을 하지 않기 위해 적어본다.

 

일단, 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
php.ini 에서 extension 시켜주도록 하자.
 

다운로드 한 직후 해야 할 작업은, dompdf 에서는 php-font-lib를 사용하나 다운로드 받은 소스코드에는 포함이 되어있지 않다..

 

https://github.com/PhenX/php-font-lib/releases

 

PhenX/php-font-lib

A library to read, parse, export and make subsets of different types of font files. - PhenX/php-font-lib

github.com

위 경로에서 0.2.2버전을 다운로드 하도록 하자.

 

그 후 dompdf/lib 폴더 안에 php-font-lib 압축 해제한 코드들을 넣어 준다.

 

소스코드는 아래와 같이 작성한다

 

 

php
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;}
를 넣어 줘야 한다는 점이다.
(max-width의 경우 A4 용지에 맞춰 나오게 끔 하기 위해서 추가하였다.)

 

반응형