Sourceforge.net에서 호스트되는 가장 활성화된 프로젝트 중 하나인 TCPDF는 강력한 PDF 세대 엔진을 전체적으로 PHP에서 구현한다. 이를 통해 시스템 디렉토리에 액세스하거나 자체 코드를 컴파일할 수 없는 사이트에서조차도 쉽게 설치할 수 있다. 이는 또한 아무 중간 단계 없이 사용자의 PHP 코드로 생성된 결과를 즉시 확인 가능하여 반복적인 개발을 매우 쉽게 만들어 주기도 한다.
TCPDF는 JPEG와 PNG와 같은 비트맵 형식과 SVG 벡터 형식을 비롯하여 다양한 유용한 이미지 형식을 지원한다. 간단한 독립형 유틸리티를 통해 TrueType, OpenType, PostScript Type 1 및 CID-0 글꼴을 처리할 수 있기 때문에, 이를 TCPDF 작성형 문서에 추가할 수 있다. TCPDF를 사용하여 무수한 1D 및 2D 바코드 형식을 생성할 수 있고, 이는 책갈피, 문서 링크, 압축, 주석, 문서 암호화 및 디지털 서명 등과 같이 모든 일반적인 PDF 기능을 지원한다.
TCPDF 및 이를 사용하는 페이지는 PHP에 쓰여져서 PDF 생성형 웹 페이지를 쉽게 작성하고 배치할 수 있다. 지원된 웹 서버와 즐겨 찾는 PHP 개발 환경을 사용하여 TCPDF를 개발 및 배치하는 동안 이 기사에서는 다음을 사용할 것이다.
- Eclipse V3.5.2 — 필자가 선호하는 오픈 소스 개발 환경 중 하나로서, 프로그래밍 언어와 환경의 광범위한 지원을 갖추었다.
- PHP Development Tools V2.2.0 — Eclipse용 PHP 플러그인이다.
- MAMP Pro V1.9 — Mac OS X를 위한 핸디 패키지로서 유용한 GUI 프런트 엔드로 고립된 환경에서 Apache, MySQL 및 PHP 등을 제공한다. Mac OS X가 Apache와 PHP가 설치된 상태로 제공된다고 하더라도 이를 사용하기로 선택했다. 왜냐하면 웹 서버/데이터베이스/PHP의 안정적이고 쉽게 분리되는 세트를 제공하기 때문이다.
- TCPDF V5.0.006 — 현재 TCPDF의 안정적인 버전이다.
이 모두에 대한 다운로드 링크를 참고자료 섹션에서 찾을 수 있다.
PHP가 설치되어 있는 한, 자체 웹 사이트에서 TCPDF를 어떻게 사용할 수 있는지에 대해 살펴보자. 설치 프로세스에 대해 다룬 다음에, PHP를 사용하여 아무 전자 상거래 사이트에서나 볼 수 있는 송장 스타일 문서가 표시된 웹 페이지를 생성할 것이다. 그 이후에 TCPDF를 사용하여, 유사한 형식화를 이용하여 송장의 인쇄 가능한 PDF 버전을 작성할 것이다.
Sourceforge.net에서부터 TCPDF를 다운로드할 때에 이는 자체 보관 ZIP 아카이브에 있다. 다시 말해서, 즐겨 찾는 ZIP 압축 도구를 사용하여 아카이브를 언팩할 수 있으며, 시작하기에 필요한 것이 전부 들어있는 TCPDF 디렉토리를 사용하여 끝낼 것이다.
TCPDF 디렉토리를 웹 문서 디렉토리에 추가하는 경우, doc/index.html을 로드하여 TCPDF 문서에 액세스할 수 있고 examples/index.php 파일을 로드하여 아무 예제나 확인할 수 있다. 이는 TCPDF 웹 사이트(참고자료 참조)에서도 나와있다.
하지만 예제를 확인하기 전에 TCPDF 설치를 구성해야 한다.
UNIX®형 시스템에서 TCPDF를 설치하는 경우 파일 모드를 변경해야 한다. 따라서 모두가 실행 가능으로 플래그 지정된 것은 아니다. 이는 Microsoft® Windows® 시스템에서 작성되는 TCPDF 아카이브의 단점이다. 다행히 이는 쉘에서부터 한 번에 조정하기에 쉽다(목록 1 참조). 또한 TCPDF가 임시 파일을 캐시와 이미지 디렉토리에 저장하기 때문에, 이들이 쓰기 가능하도록 보장해야 한다.
다음에 이 파일을 사용자에 지정하고 웹 서버를 그룹화해야 한다. 이는 종종 사용자 wwww 및 그룹 www이지만, 사용자의 시스템에 따라 다를 것이다. TCPDF를 개인 웹 사이트 영역에서부터 실행하는 경우(때로는 홈 디렉토리에서 public_html), 이 단계를 건너뛸 수 있다.
목록 1. 파일 모드 및 소유권 조정하기
$ cd tcpdf
$ find . -type f | xargs chmod -x
$ chmod +w cache images
$ chown -R www:www .
|
일부 시스템에서 사용자와 그룹을 분리하기 위해 명령이 : 대신에 .를
사용할 수도 있음을 유의하자. 세부사항은 문서를 확인하자.
즐겨 찾는 텍스트 편집기를 사용하여 config/tcpdf_config.php 파일을 로드한다. 이는 TCPDF의 구성 설정이고, 라이브러리의 기본값을 제어할 뿐만 아니라 지원 파일을 찾는 방법을 알려준다.
tcpdf_config.php에서 변경하려는 설정에는 다음이 포함된다.
PDF_PAGE_FORMAT— 메트릭 페이지 형식을 사용하지 않는 경우 이를letter로 설정한다. TCPDF는 특이한 것을 구하지 않는 한, 대체로 프린터보다는 페이지 크기를 더 많이 지원한다.PDF_UNIT— PDF 문서를 레이아웃하기 위해 밀리미터 대신에 오히려 점을 사용하는 경우, 이를pt로 정한다.PDF_CREATOR,PDF_AUTHOR— PDF 생성형 코드가 문서 생성자와 작성자를 설정하는 것을 잊은 경우 기본 문서 생성자와 작성자이다.
PHP 코드에서도 이러한 설정을 조정할 수 있기 때문에, 확실하지 않아도 우려할 필요는 없다(예를 들어, 여기에서 세로 모드 문서 레이아웃을 설정해도, 여전히 가로 문서를 작성할 수 있다).
기본 구성 설정을 통해 TCPDF는 파일과 디렉토리를 원본 위치에서부터 이동하지 않았다고 가정하여 제공되는 예제를 렌더링하는 데 문제가 없어야 한다.
이제 예제 파일을 로드하여 작동 중인 TCPDF 설치를 받았는지 확인할 수 있다. 이를 사용하여 송장의 인쇄 가능 버전을 작성하자.
웹 사이트의 전자 상거래 작품을 작성한 후에 고객이 물건을 주문하면 사용자는 이 돈을 받게 될 것이다. 이는 훌륭하지만, 주문이 잘못되거나 신용 카드 회사가 지불을 망치는 경우 고객은 어떤 종류의 송장을 원할 것이다.
합리적으로 훌륭한 모양의 송장 웹 페이지를 만들자. 그러면 이들은 주문한 것과 비용을 얼마나 청구할 것인지를 확인할 수 있다.
필자의 즐겨 찾는 PHP 개발 환경을 사용하여 다음 파일이 들어있는 새 Invoice 폴더를 만들었다.
- Invoice.php — 송장을 작성하는 PHP
- Invoice.css — 송장에 대해 스타일링하는 CSS
- Azuresol_OnyxTree-S.png — 사용자의 회사 로고로 사용할 Azuresol에 의한 "OnyxTree S"이다(iconfinder.com 웹 사이트의 무료 아이콘 (참고자료 참조)).
- gentleface_print.png — PDF 생성을 트리거하는 데 사용할 gentleface에 의한 "Print"이다(iconfinder.com의 또 하나의 무료 아이콘).
Invoice.php에서 페이지가 PDF 인수로 호출되었는지 여부를 확인한다(목록 2 참조). 그렇지 않은 경우
사용자가 정상 웹 페이지 이후이므로 generateHTML 함수를 사용하여 페이지를 표시한다(목록 3 참조).
나중에 generatePDF 함수를 살펴 보겠지만,
송장 데이터의 PDF를 생성하는 데 이를 사용할 것이라고 가정하는 것이 안전하다.
목록 2. 페이지 생성 제어 코드
if( array_key_exists( 'PDF', $_REQUEST ) ) {
generatePDF( $invoiceData );
} else {
generateHTML( $invoiceData );
}
|
$invoiceData 배열은 모든 송장 데이터를 유지한다.
이를 직접 Invoice.php에서 작성하지만 데이터베이스, 웹 서비스 또는 어떠한 종류의 온라인 쇼핑 카트 시스템에서부터
나오는 데이터를 상상할 수 있다.
목록 3. HTML 생성
function generateHTML( $data ) {
?>
... HTML code was here ...
<?php
foreach( $data['items'] as $item ) {
echo '<tr class="invoiceRow">' . "\n";
echo ' <td class="itemCol">' . $item[0] . "</td>\n";
echo ' <td class="quantityCol">' . $item[1] . "</td>\n";
echo ' <td class="priceCol">' . $item[2] . "</td>\n";
echo ' <td class="costCol">' . $item[3]. "</td>\n";
echo "</tr>\n";
}
?>
... HTML code was here ...
<?php
echo '<td class="totalCol">' . $data['total'] . "</td>\n";
?>
... HTML code was here ...
<?php
echo 'Invoice prepared for ' . $data['user'] . ' on ' . $data['date'] . "\n";
?>
... HTML code was here ...
<?php
}
|
필자는 여기에서 간결성을 위해 모든 HTML 마크업 코드를 삭제했다. 이를 CreatingPDFs-Invoice.zip 아카이브에서 찾은 Invoice.php에서 볼 수 있다. 이는 다운로드 섹션에서 찾을 수 있다.
$data로 함수에 전달한 송장 정보를 사용하여, 양, 단위 가격 및 전체 가격과 함께
항목당 하나의 행이 들어있는 표를 작성한다. 표의 끝에 주문의 총 비용이 들어있는 하나의 행을 추가한다. 페이지
바닥글에는 사용자의 사용자 ID 및 송장이 준비되었을 때의 날짜/시간이 들어있다.
물론 단순한 것들과 사용자 자체 사이트에 이를 구현할 때의 기본 도전과제가 데이터 소스와 함께 상호작용하며 CSS 스타일링을 정확하게 얻게 될 것이다.
그림 1. 웹 페이지 송장 그 실체
전체적으로 허구의 South Seas Pacifica 회사는 고급 커피와 차를 제공하며, 필자는 보아하니 Sumatran 종류 심각하게 중독되어있다. 적어도 그 가격은 훌륭하다!
맨 아래 오른쪽의 프린터 아이콘이 눈길을 끌고, 사용자는 그 곳을 클릭할 수 있고 송장의 인쇄물을 받도록 예상할 것이다. 여기에서 TCPDF가 시작된다. 단순히 웹 페이지를 인쇄하는 것이 아니라 자신이 원할 때에 인쇄할 수 있는 고급스러운 PDF 버전을 가치있는 고객에게 제공할 것이다.
이제 좋아 보이는 웹 페이지 송장이 있으니 인쇄할 수 있는 PDF 버전을 작성해야 한다.
목록 2에서부터 돌아보면, Invoice.php 페이지를
PDF 인수(http://.../Invoice.php?PDF)로 로드하면 동일한 데이터를 사용하여
generatePDF 함수를 호출할 것이다(목록 4 참조).
목록 4. PDF 송장 생성하기
function generatePDF( $data ) {
# Create a new PDF document.
$pdf = new InvoicePdf( $data, 'P', 'pt', 'LETTER' );
# Generate the invoice.
$pdf->CreateInvoice();
# Output the PDF document.
$pdf->Output( 'Your_Invoice.pdf', 'D' );
}
|
generatePDF 함수는 InvoicePdf 오브젝트를 작성하고 CreateInvoice
메소드를 호출한 다음에 PDF 문서를 Your_Invoice.pdf라는 다운로드 이름으로 사용자의 브라우저에 전송한다. 이는 매우 쉬워 보이지만,
독자가 원본 Invoice 스타일링을 복제하여 InvoicePdf 클래스를 스스로 작성해야 한다는 사실이 숨어있다. 방법을 살펴보자.
InvoicePdf 클래스는 TCPDF의 TCPDF 클래스를 확장하는데, 이는 기본 PDF 생성형
엔진이다. 생성자에서(목록 5 참조) 전달되었던
$orientation(페이지 방향), $unit(측정 단위) 및
$format(페이지 크기)을 사용하여 상위 클래스를 초기화한다.
TCPDF 생성자의 마지막 세 가지 인수는 입력이 유니코드(기본값, true)이고, 생성된 PDF의 문자 인코딩이
UTF-8이 될 것이며, 디스크 캐싱을 사용해서는 안 된다(false)라는 것을 표시한다. 디스크
캐싱은 PDF를 작성하면서 인메모리 공간을 줄이지만 속도가 느려진다. 여기에서는 문서가 크거나 복잡하지 않기 때문에
이러한 균형을 만들 이유가 없다.
상위 클래스를 초기화한 후, 나중에 송장 데이터에 대한 참조를 저장한다. 그 다음에 SetMargins
메소드를 사용하여 페이지 여백을 왼쪽과 오른쪽에서 72포인트 및 위쪽에서 36포인트로 설정한다. SetMargins
최종 인수는 자체 값으로 기본 페이지 여백을 덮어 쓰는 것을 표시한다. SetAutoPageBreaks 메소드를 사용하여 TCPDF에
페이지의 아래쪽에서부터 36포인트이면 새 페이지를 자동으로 작성하도록 알린다.
목록 5.
InvoicePdf 클래스 생성자
function __construct( $data, $orientation, $unit, $format ) {
parent::__construct( $orientation, $unit, $format, true, 'UTF-8', false );
$this->invoiceData = $data;
# Set the page margins: 72pt on each side, 36pt on top/bottom.
$this->SetMargins( 72, 36, 72, true );
$this->SetAutoPageBreak( true, 36 );
# Set document meta-information
$this->SetCreator( PDF_CREATOR );
$this->SetAuthor( 'Chris Herborth (chrish@pobox.com)' );
$this->SetTitle( 'Invoice for ' . $this->invoiceData['user'] );
$this->SetSubject( "A simple invoice example for 'Creating PDFs on
the fly with TCPDF' on IBM's developerWorks" );
$this->SetKeywords( 'PHP, sample, invoice, PDF, TCPDF' );
//set image scale factor
$this->setImageScale(PDF_IMAGE_SCALE_RATIO);
//set some language-dependent strings
global $l;
$this->setLanguageArray($l);
}
|
여백을 설정한 이후에 PDF 문서 메타 정보를 설정한다. 이는 즐겨 찾는 PDF 뷰어 내 문서 특성 창에서 표시될 것이다. 이는 단지 문자열이기 때문에 애플리케이션에 대해 합리적인 것으로 무엇이든지 설정할 수 있다.
setImageScale 메소드를 사용하여 TCPDF의 구성 파일에서 기본 이미지 배율 비율 세트를 사용한다. 이는
비트맵화된 이미지 크기를 픽셀 크기에서부터 페이지에 적합한 어떤 것으로 조정하는 데 사용된다.
마지막으로 setLanguageArray를 사용하여 PDF 파일을 위한 어떠한 언어 의존 문자열을 설정한다.
이는 TCPDF의 기본 구성으로 로드한 언어별 구성 파일에서 정의되었다.
목록 6에서 Header 메소드를 오버라이트한다. 이는 각 페이지의 머리글을 위한 내용을 생성하는 데
호출된다. 첫 번째로 어떠한 변수를 정의한다. 14포인트의 bigFont 크기로 시작하여
bigFont 크기에 비례하여 정상 텍스트와 로고 이미지의 상대적인 크기를 파악한다. 그 다음에 TCPDF 호출에 대해 살펴본다.
ImagePngAlpha 메소드는 로고 이미지를 맨 위 왼쪽 모서리의 72포인트에 36포인트 아래로 위치 지정하여 삽입한다.
이는 이전과 여백 설정을 일치시킨다. 이는 네모난 이미지이기 때문에 동일한 너비와 높이(계산된 $imageScale)를 지정할 수 있다. 이는 PNG 이미지임을
표시하게 된다. 왜냐하면 이 호출은 실제로 PNG와 JPEG 이미지를 삽입할 수 있기 때문이다(PHP 설치에서 GD
라이브러리를 설치한 경우 이는 GD로 지원되는 이미지를 로드할 수도 있음). 그 다음에, 이 이미지를 대상으로 하는
PDF 링크(AddLink 메소드로 작성됨)를 추가하지 않았기 때문에 널을 지정한다.
그 다음에 T를 사용하여 이미지 영역의 맨 위 오른쪽 모서리에서 그리는 다음 PDF 오브젝트가 있어야 한다고
표시한다. 마지막으로 TCPDF에 원래 72dpi(일반 화면 해상도)였었던 이미지를 크기 조정하지 말고,
이미지를 페이지에 왼쪽 정렬해야 한다고 알린다.
분명히 ImagePngAlpha 메소드를 사용하면 PDF 문서에서 이미지가 페이지에 추가되는 방법에 관해
다양한 제어가 주어진다(목록 6 참조).
목록 6. 페이지 머리글 생성
public function Header() {
global $webcolor;
# The image is this much larger than the company name text.
$bigFont = 14;
$imageScale = ( 128.0 / 26.0 ) * $bigFont;
$smallFont = ( 16.0 / 26.0 ) * $bigFont;
$this->ImagePngAlpha('Azuresol_OnyxTree-S.png', 72, 36, $imageScale,
$imageScale, 'PNG', null, 'T', false, 72, 'L' );
$this->SetFont('times', 'b', $bigFont );
$this->Cell( 0, 0, 'South Seas Pacifica', 0, 1 );
$this->SetFont('times', 'i', $smallFont );
$this->Cell( $imageScale );
$this->Cell( 0, 0, '', 0, 1 );
$this->Cell( $imageScale );
$this->Cell( 0, 0, '31337 Docks Avenue,', 0, 1 );
$this->Cell( $imageScale );
$this->Cell( 0, 0, 'Toronto, Ontario', 0, 1 );
$this->SetY( 1.5 * 72, true );
$this->SetLineStyle( array( 'width' => 2, 'color' =>
array( $webcolor['black'] ) ) );
$this->Line( 72, 36 + $imageScale, $this->getPageWidth() - 72, 36
+ $imageScale );
}
|
로고 이미지가 머리글에 위치가 지정된 이후 글꼴을 설정한 다음에(bigFont 크기로 Times
굵은체), 회사 이름과 주소 정보가 있는 셀의 수를 작성한다. 이러한 셀에는
텍스트가 들어있고, 다소 HTML에서 표 셀과 같이 작동한다. Cell
메소드는 이러한 인수를 취한다(및 실제로는 그 이상, 전체 목록을 보려면 TCPDF 문서를 참조한다).
Width— 셀 너비; 0으로 설정되면 셀이 오른쪽 여백으로 끝까지 확장될 것이다(또는 오른쪽에서 왼쪽 방향 언어를 사용하는 경우 왼쪽 여백).Height— 셀 높이; 0으로 설정되면 셀의 높이가 내용에 맞게 펼쳐질 것이다.Text— 현재 글꼴과 색상 설정을 사용하여 셀 내에서 그리기 위한 텍스트이다.Border— 경계가 셀 주변에서 그려야 하는 지 여부를 표시한다. 이 경우에 경계를 원하지 않기 때문에 0을 사용하는 것이다. 또한 1을 전달하여 셀 주변의 완전한 경계를 그리거나 문자열을 전달하여 특정 경계 면을 표시할 수 있다.Position— 다음 셀을 작성하는 지점을 표시한다. 1은 다음 행의 시작 지점에 표시하려는 것을 표시하지만, 0을 사용하여 이 옆에 다음 셀을 추가하거나 2를 사용하여 현재의 X 위치를 유지하고 다음 행으로 아래로 이동할 수 있다.
마지막으로 Header 메소드는 머리글의 맨 아래에서 페이지의 내용 영역을 끝까지 가로지르는 2포인트의 검은색 선을 그린다. 그림 2에서는
Mac OS X의 미리보기 애플리케이션이 렌더링하는 대로 페이지에서 이것이 어떻게 보이는지 표시된다.
그림 2. 웹 페이지 머리글과 똑같은 인쇄 머리글
이제 원본 머리글의 합리적인 팩스를 작성했으니 바닥글을 생성할 수 있도록 Footer 메소드도 오버라이드해야 한다.
이는 훨씬 더 간단하다. 사용자의 ID와 송장 날짜가 들어있으며, 또 다른 2포인트 검은색 선으로 페이지의 나머지와 분리된다.
이 메소드에서 아직 확인하지 않은 유일한 부분은 음수 값으로
SetY 메소드를 호출하는 것이다. 이렇게 하면 현재의 Y는
페이지의 맨 아래에 비례하여 설정된다. 여기에서는 아래쪽 여백에 너무 가깝게 그리지 않도록 하기 위해
페이지 바닥글을 위해 공간을 넉넉하게 남기고 있다(목록 7 참조).
목록 7. 페이지 바닥글 생성
public function Footer() {
global $webcolor;
$this->SetLineStyle( array( 'width' => 2, 'color' =>
array( $webcolor['black'] ) ) );
$this->Line( 72, $this->getPageHeight() - 1.5 * 72 - 2,
$this->getPageWidth() - 72, $this->getPageHeight() - 1.5 * 72 - 2 );
$this->SetFont( 'times', '', 8 );
$this->SetY( -1.5 * 72, true );
$this->Cell( 72, 0, 'Invoice prepared for ' .
$this->invoiceData['user'] . ' on ' . $this->invoiceData['date'] );
}
|
페이지를 작성할 때에 이는 프린터 아이콘을 제외하고는 송장의 웹 버전의 모양과 같이 나온다. 이는 인쇄 버전이기 때문에 여기에서 중단한다(중복임). 그림 3에 결과가 있다.
그림 3. 인쇄된 바닥글
이제 훌륭한 머리글과 바닥글이 있는 빈 페이지가 있다. 유용하도록 실제 송장 내용을 추가해야 한다.
AddPage 메소드를 사용하여 새 페이지(이 경우에는 페이지만)를 시작한 후에 글꼴을 11포인트 Helvetica로 설정하고
삽입 지점을 페이지의 맨 위에서부터 144포인트까지 이동한다. 이로 인해 표가 시작되기 전에
머리글 아래 작은 공간이 남게 된다.
그 다음에 두 개의 72포인트 여백, 하나의 넓은 열 및 세 개의 정규 열인 페이지 너비를 기반으로 표를 가운데 맞춤하기 위해 필요한 들여쓰기 양을 계산한다.
그 이후에 셀 시리즈를 작성하여 이전에 계산했던 값을 사용하고 각 셀의 전체 경계를 계산하여 열 표제를 렌더링한다. 또한 숫자 열에 대해
머리글을 오른쪽 정렬하여 값으로 배열한다. 머리글 셀의 끝에서 Ln 메소드를 호출하여 다음 행의 시작으로 아래로 이동한다.
송장에서 항목을 통해 반복하는 foreach 루프를 통해 각 내용 행에 대해 동일한 종류의 레이아웃을 수행한다(목록 8 참조).
목록 8. 페이지 내용 생성
public function CreateInvoice() {
$this->AddPage();
$this->SetFont( 'helvetica', '', 11 );
$this->SetY( 144, true );
# Table parameters
#
# Column size, wide (description) column, table indent, row height.
$col = 72;
$wideCol = 3 * $col;
$indent = ( $this->getPageWidth() - 2 * 72 - $wideCol - 3 * $col ) / 2;
$line = 18;
# Table header
$this->SetFont( '', 'b' );
$this->Cell( $indent );
$this->Cell( $wideCol, $line, 'Item', 1, 0, 'L' );
$this->Cell( $col, $line, 'Quantity', 1, 0, 'R' );
$this->Cell( $col, $line, 'Price', 1, 0, 'R' );
$this->Cell( $col, $line, 'Cost', 1, 0, 'R' );
$this->Ln();
# Table content rows
$this->SetFont( '', '' );
foreach( $this->invoiceData['items'] as $item ) {
$this->Cell( $indent );
$this->Cell( $wideCol, $line, $item[0], 1, 0, 'L' );
$this->Cell( $col, $line, $item[1], 1, 0, 'R' );
$this->Cell( $col, $line, $item[2], 1, 0, 'R' );
$this->Cell( $col, $line, $item[3], 1, 0, 'R' );
$this->Ln();
}
# Table Total row
$this->SetFont( '', 'b' );
$this->Cell( $indent );
$this->Cell( $wideCol + $col * 2, $line, 'Total:', 1, 0, 'R' );
$this->SetFont( '', '' );
$this->Cell( $col, $line, $this->invoiceData['total'], 1, 0, 'R' );
}
|
마지막 부분 코드는 전체 행을 렌더링한다. 이는 셀 사이에 글꼴 스타일을 어떻게 쉽게 변경할 수
있는지 시연한다(굵게 켜기 및 끄기를 위한 SetFont 메소드 호출 사용).
첫 번째 텍스트 셀의 너비는 마지막 열의 맨 아래에서 송장 총계를 표시하려고 하기 때문에 표의 처음 세 개의 열을 포괄하도록 설정한다.
이를 완료하면 송장 항목 표의 모양이 훌륭해진다(그림 4 참조).
그림 4. 송장에서의 항목
논리적으로 텍스트 셀을 레이아웃하여 원본 웹 송장을 인쇄에 적합한 형식으로 다시 작성하였다. TCPDF를 통해 웹 페이지 자체나 내재된 데이터로의 변경을 요구하지 않고도 PDF를 작성하기 위한 지원을 기존 PHP 웹 페이지에 추가할 수 있다.
이 기사에서는 PDF 문서를 생성하기 위해 인기 있는 PHP 라이브러리인 TCPDF를 소개하였다. TCPDF는 추가 라이브러리를 요구하지 않고도 이를 수행하여, 기존 PHP 웹 사이트의 일부로 설치하기에 쉽게 만든다. UNIX형 시스템에서 TCPDF를 설치 및 구성하는 것에 대한 개요를 알려주었다. 그 다음에 이국적인 온음료 전문 전자 상거래 사이트에서 볼 수 있는 종류와 유사하게 간단한 웹 기반 송장을 작성하였다.
전문 송장과 같이 보이는 웹 페이지가 있었고, TCPDF 클래스를 확장하여 고객이 원하는 때에 다운로드하거나 인쇄할 수 있는 송장의 PDF
버전을 만들었다. Header 및 Footer 메소드를 오버라이드하면
익숙한 방식으로 페이지를 설정할 수 있었고, 그 다음에 송장 항목을 표로 레이아웃하는 추가 메소드를 썼다.
| 설명 | 이름 | 크기 | 다운로드 방식 |
|---|---|---|---|
| Article source code | os-tcpdf-CreatingPDFs-Invoice.zip | 21KB | HTTP |
교육
-
TCPDF.org를 살펴보자.
-
"자바 애플리케이션에서 동적으로 PDF 파일 생성하기"는 iText를 소개하고 Java 기술 애플리케이션에서부터 PDF 문서를 생성하기 위해 이를 사용하는 단계별 안내서를 제공한다.
-
필자는 Iconfinder를 사용하여 회사 로고와 프린터 아이콘을 위해 사용된
무료로 사용 가능한 아이콘을 찾았다. Iconfinder를 통해 쉽게 많은 고품질 아이콘을 검색하고, 크기와 상용으로 사용 가능한지 여부를 기반으로 필터할 수 있다.
-
"Eclipse Platform 시작하기"에서는 Eclipse와 플러그인을 설치하는 방법에 관한 세부사항을 비롯하여 Eclipse의 히스토리와 개요를 제공한다.
-
developerWorks 팟캐스트에서 소프트웨어 개발자를 위한 흥미로운 인터뷰와 토론을 들을 수 있다.
-
developerWorks의 기술 행사 및 웹 캐스트를 통해 최신 정보를 얻을 수 있다.
-
Twitter의 developerWorks 페이지를 살펴보자.
-
IBM 오픈 소스 개발자에게 유익한 컨퍼런스, 기술 박람회, 웹 캐스트 및 기타 행사를 확인하고 참여하자.
-
developerWorks 오픈 소스 영역에서는 오픈 소스 기술을 활용하여 개발 작업을 수행하고 이러한 기술을 IBM 제품과함께 사용하는 데 도움이 되는 사용 정보, 도구 및 프로젝트 업데이트와 가장 인기 있는 기사 및 튜토리얼을 확인할 수 있다.
-
My developerWorks 커뮤니티는 매우 다양한 주제를 다루는 일반 커뮤니티로 성공적으로 운영되고 있다.
-
무료로 제공되는 developerWorks
On demand demos를 통해 IBM 및 오픈 소스 기술에 대해 배우고 제품 기능을 익히자.
제품 및 기술 얻기
-
Sourceforge.net에서 TCPDF 프로젝트를 다운로드할 수 있다.
-
Eclipse IDE는 이 기사에서 코드를 작성하기 위해 사용되었다.
-
Eclipse용 PHP Development Tools를 얻을 수 있다.
-
MAMP Pro(Mac OS X용 Apache, MySQL, PHP 패키지)를 얻을 수 있다.
-
Lotus Connections 문서는 Lotus Connections의 지원되는 버전에 대한 다른 자원 및 제품 문서가 나열된다.
-
DVD로 제공되거나 다운로드할 수 있는 IBM 시험판
소프트웨어를 사용하여 후속 오픈 소스 개발 프로젝트를 구현해 보자.
- IBM 제품 평가판을 다운로드하거나
IBM SOA Sandbox의 온라인 시험판을 살펴보고 DB2®, Lotus®, Rational®, Tivoli® 및 WebSphere®의
애플리케이션 개발 도구와 미들웨어 제품을 사용해 볼 수 있다.
토론
-
developerWorks 포럼 & 블로그를 통해 developerWorks 커뮤니티에 참여하자.
Chris Herborth is an award-winning senior technical writer with more than 10 years of experience writing about operating systems and programming. When he's not playing with his son, Alex, or hanging out with his wife, Lynette, he spends his time designing, writing, and researching (that is, playing) video games.