php pdf 출력
페이지 정보
작성자 서방님 댓글 1건 조회 312회 작성일 12-11-06 17:07본문
TCPDF라는 훌륭한 php용 pdf 클래스가 있습니다.
관련 문서를 찾아보니 거의 없어서 오랜만에 포스팅해봅니다.
이와 더불어 TCPDF를 모니위키 CVS버전에 적용하여 이제는 html문서를 pdf도 즉석에서 출력이 가능하게 되었으며,
더 잘 활용한다면 이제 PDF의 막강함을 이용할 수도 있게 될것입니다.
== 사이트 ==
http://tcpdf.sf.net
== 예제 ==
다양한 예제와 소스
* http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf_examples
== 다운받기 ==
현재 2008년 12월5일자로 버전 4.3_009까지 나왔습니다. PHP4와 PHP5용 버전이 따로 준비되어 있습니다.
== 설치 ==
압축을 풀고, 유닉스 환경에서는 퍼미션을 조절해야 하고,
examples/ 밑의 파일들을 열어봅니다. 제대로 설치되었다면 예제가 제대로 실행되어야 합니다.
* http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf_installat... 참조
== 한글 글꼴 설치 ==
한글 글꼴을 설치하기 위해서는
1. 한글 트루타입 글꼴이 필요 (대부분의 글꼴은 유니코드 트루타입 글꼴입니다. 맑은고딕 등등)
2. 바탕체 류의 글꼴은 ttc파일이므로 이 파일을 쪼개어서 ttf파일을 얻어내야 합니다. (생략)
3. ttf2pt1 소스 컴파일하면 ttf2pt1 실행파일이 얻어집니다. ==> 이것은 트루타입 글꼴로 부터 글꼴 메트릭 (afm,ufm) 파일을 얻기 위함 입니다.
4. ttf2pt1 (ttf2ufm)을 사용해서 ufm 파일을 추출 (ttf2pt1 -a -F undotum.ttf) => undotum.ufm 얻음
5. 얻어낸 ufm 파일을 이용해서 TCPDF에서 사용할 수 있는 압축된 글꼴 파일 및 php 글꼴 파일정보 생성
* php makefont undotum.ttf undotum.ufm 실행
6. 얻어진 undotum.php와 압축된 undotum.z undotum.ctg.z 파일을 TCPDF가 설치된 디렉토리의 fonts/ 디렉토리로 복사.
7. $pdf->SetFont('undotum');을 example 소스의 적절한 위치에 집어넣으면 글꼴이 임베딩 된 pdf파일을 얻으실 수 있습니다.
8. 글꼴이 임베딩 되지 않은 PDF파일을 얻으려면 1) cidfont0 형태로 글꼴 php파일을 변경시켜 주거나, 2) undotum.php파일에서 $file 라인을 지워줍니다.
* cidfont0( CID Type0)를 쓰지 않는 두번째 방법을 쓰는 경우는 주의해야 합니다. 서버에 설치된 파일과 사용자 PC에 있는 글꼴이 완전히 일치해야 정상적으로 보입니다. (글꼴이 변형되어 글꼴 gid가 바뀌는 경우에는 제대로 문서를 보여주지 못합니다.)
* 글꼴을 임베딩하는 경우에는 글꼴이 모두 임베딩 되므로, 출력 pdf파일 사이즈가 꽤 큽니다. (고급 pdf파일 라이브러리/프로그램의 경우는 필요한 글꼴만 임베딩시키므로 pdf사이즈가 훨씬 작을 수 있습니다. (dvipdfmx 등등)
== 주의 ==
현재 TCPDF에 내장된 writeHTML() 함수는 한글 유니코드 글꼴과 영문 글꼴(type1 혹은 유니코드 트루타입)을 섞어서 쓸 수 없습니다. 한글이 섞여있는 경우는 무조건 한글 유니코드 글꼴을 사용해야 한글이 정상 출력됩니다.
영문 type1 글꼴 + 한글 유니코드 트루타입 글꼴을 쓰는 경우는 TCPDF를 패치하면 영문 글꼴을 사용하면서 한글도 출력할 수 있습니다.
다음의 패치를 사용해보세요.
http://kldp.org/files/tcpdf_4_3_009_081206.diff_.txt
------------------------------------------------------------------------------------------------------------------------------------------------
출처 : http://nonots.bada.cc/myblog/babo/205

#### 쓴이 : 권기성 <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. 마무리
화창해도 모자랄 춘삼월 주말.. 하늘이 곧 비가 올 듯 꾸무리 우중충하다.
고소하다고나 해야 할지..
어제 한 전총리 무죄판결 소식을 듣고 그냥 한번 어설프게 정리해 봤다.
댓글목록
서방님님의 댓글
서방님 작성일
<p><a href="http://kldp.org/node/100633">http://kldp.org/node/100633</a></p>
<p> </p>
<p><a href="http://nonots.tistory.com/entry/TCPDF-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%ED%95%9C%EA%B8%80-PDF-%ED%8C%8C%EC%9D%BC-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0">http://nonots.tistory.com/entry/TCPDF-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%ED%95%9C%EA%B8%80-PDF-%ED%8C%8C%EC%9D%BC-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0</a></p>