가끔정상

TCPDF 를 이용한 한글 PDF 파일 생성하기

권성재 2010. 4. 10. 13:50
사용자 삽입 이미지

#### 쓴이 : 권기성 <nonots@hanmail.net>
#### 쓴때 : 2010-04-10 아침 수영갔는데 공사중이어서 못하고 그냥 와서.
#### 쓴것 : TCPDF php5 class 를 이용해서 한글 pdf 파일 생성


1. 개요

TCPDF 는 php 로 pdf 파일을 생성하는 오픈소스 라이브러리다.
초기 버전은 한글 출력이 골치 아팠는데 이제는 쉬워졌다.
한글 pdf 문서 작성시 기본 폰트를 사용하는 기본적인 사항만 기록해 둔다.


2. 서버 환경
- 서버 : 리눅스 centOS 5.4 최종
- 웹서버 : 아파치 2.0.63
- PHP : 5.2.6


3. 설치

http://www.tcpdf.org/ 혹은
http://sourceforge.net/projects/tcpdf/files/
위 사이트에서 tcpdf_4_9_011.zip 파일을 다운받아 웹 경로에서
압축을 푼다. 다른 버전일 경우 아래 내용이 안먹힐 수 있다. 책임 안진다.
tcpdf 폴더가 생기고 예제 파일은 tcpdf/examples 아래에 있다. 이걸 보면 된다.
예를 들어 http://mydomain/tcpdf/examples/index.php
와 같이 하면 다양한 예제를 알 수 있다.
주의할건 모든 php 문서는 UTF-8 유니코드로 작성 저장되어야한다.
..
그리고 당연히, 자신의 PC 에 아크로뱃 리더가 설치되어 플러그인이
깔려 있으면 웹브라우저에서 pdf 생성결과를 바로 편하게 확인가능하다.


4. 한글 출력

위 예제중에 38 번 "NON-embedded CID-0 CJK font" 을 보면 현재는 일본어인데
http://mydomain/tcpdf/examples/example_038.php
이걸 한글로 변경해보자. tcpdf/examples/example_038.php 파일을 보면

....
72 // set font
73 $pdf->SetFont('arialunicid0', 'U', 20); ## 폰트 종류,스타일,크기 지정
74
75 // add a page
76 $pdf->AddPage();
77
78 // print a line using Cell()
79 //$pdf->Cell(0, 10, 'こんにちは世界', 1, 1, 'C');
80 $pdf->Cell(0, 10, '한글 출력 테스트입니다.', 1, 1, 'C');
....

와 같이 79 라인 일본어를 한글로 바꾸어 저장한후 웹브라우저를 새로고침 하면
한글이 아직 안나올꺼다.
위에 사용된 "airalunicid0" 이라는 폰트 부분을 손봐야 한다.
tcpdf/fonts/arialunicid0.php 파일을 편집기로 열어서 제일 마지막

....
1761 $enc='UniKS-UTF16-H';
1762 $cidinfo=array('Registry'=>'Adobe','Ordering'=>'Korea1','Supplement'=>0);
1763 include(dirname(__FILE__).'/uni2cid_ak12.php');
1764
1765 //$enc='UniJIS-UTF16-H';
1766 //$cidinfo=array('Registry'=>'Adobe','Ordering'=>'Japan1','Supplement'=>5);
1767 //include(dirname(__FILE__).'/uni2cid_aj16.php');^M
....

와 같이 일본어 부분을 주석처리하고, 바로 위 한글 부분 주석을 풀고 저장한다.
http://mydomain/tcpdf/examples/example_038.php
를 다시 재시작하면 한글이 보일꺼다.

이제 pdf 파일 헤더 부분의 벌건 로고 이미지와
TCPDF Example
by Nicola Asuni - Tecnick.com
www.tcpdf.org
이런 문구를 변경하려면..
tcpdf/config/tcpdf_config.php 파일을 편집기로 열어서 적당하게 문구나
로고 이미지 경로를 수정하면 된다. 로고 이미지 기본 경로는 tcpdf/images/ 이다.

....
124 /**
125 * header title
126 */
127 define ('PDF_HEADER_TITLE', 'PHPSCHOOL PDF Example');
128
129 /**
130 * header description string
131 */
132 define ('PDF_HEADER_STRING', "by Nonots - http://www.badaweb.co.kr");
133
134 /**
135 * image logo
136 */
137 define ('PDF_HEADER_LOGO', 'tcpdf_logo.jpg');
....


arialunicid0 폰트는 고딕폰트이다. 한글 명조체는 hysmyeongjostdmedium 이다.

....
$pdf->SetFont('arialunicid0', 'U', 20);
$pdf->Cell(0, 10, '한글 출력 테스트입니다.', 1, 1, 'C');
$pdf->SetFont('hysmyeongjostdmedium', 'U', 20);
$pdf->Cell(0, 10, '한글 명조체 : 크기 20 : 한글 출력 테스트입니다.', 1, 1, 'C');
$pdf->SetFont('hysmyeongjostdmedium', 'B', 10);
$pdf->Cell(0, 10, '한글 명조체 : 크기 10 : 한글 출력 테스트입니다.', 1, 1, 'C');
$pdf->SetFont('arialunicid0', 'I', 8);
$pdf->Cell(0, 10, '한글 고딕체 : 크기 8 : 한글 출력 테스트입니다.', 1, 1, 'C');
....

와 같이 크기와 스타일을 변경해서 명조 고딕체를 지정할 수 있다.
만약 html 로 출력된 내용을 pdf 로 하려면, example_006.php 이나 021 번을 참조한다.
아래와 같이 간단한 html 테이블을 pdf 로 변환 가능하다.

....
$html = "<table border=1 cellpadding=2 cellspacing=2>
<tr><th>테스트 </th><td><font color=red>빨간색</font></td></tr>
<tr><td>테스트 </td><td><div style=\"font-size:x-small;\">작은폰트</div></td></tr>
</table> ";
$pdf->writeHTML($html, true, 0, true, 0);
....

추가적인 내용은
http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf_examples
여기 샘플페이지 참고 하면 된다.
또, 기본 폰트말고 자신이 직접 한글 폰트를 추가해서 더 멋있게 꾸미려고 한다면
http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf_fonts
http://kldp.org/node/100633
등을 참조하면 된다.
폰트를 추가하려고 tcpdf/fonts/utils 에 있는 툴 이용해서 한번 해볼까 하다가
그냥 말았다. 동기부여가 안된다.-_-;;
만약 소스를 새로 컴파일하려면 tcpdf/fonts/utils/src/ 에 있는걸로 하면 된단다.



5. 마무리

화창해도 모자랄 춘삼월 주말.. 하늘이 곧 비가 올 듯 꾸무리 우중충하다.
고소하다고나 해야 할지..
어제 한 전총리 무죄판결 소식을 듣고 그냥 한번 어설프게 정리해 봤다.