목차
- 1. 간단한 예제
- 2. 헤더, 푸터, 페이지 나눔 그리고 이미지
- 3. 줄바꿈과 색상
- 4. 다단 편집
- 5. 테이블
- 6. 링크와 링크 텍스트
- 7. 새 글꼴과 인코딩 추가
[adsense]
2. 헤더, 푸터, 페이지 나눔 그리고 이미지
다음의 헤더와 푸터, 로고가 있는 두페이지를 출력하는 예제를 보자.
< ?php
require('fpdf.php');
class PDF extends FPDF
{
//Page header
function Header()
{
// Logo
$this->Image('logo_pb.png',10,8,33);
//Arial bold 15
$this->SetFont('Arial','B',15);
//오른쪽으로 이동
$this->Cell(80);
//제목
$this->Cell(30,10,'Title',1,0,'C');
//줄바꿈
$this->Ln(20);
}
//페이지 푸터
function Footer()
{
//아래쪽에서 1.5cm 만큼 떨어진 위치
$this->SetY(-15);
//Arial italic 8
$this->SetFont('Arial','I',8);
//페이지 번호
$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
}
}
//상속받은 클래스를 인스턴스로 생성
$pdf=new PDF();
$pdf->AliasNbPages();
$pdf->AddPage();
$pdf->SetFont('Times','',12);
for($i=1;$i< =40;$i++)
$pdf->Cell(0,10,'Printing line number '.$i,0,1);
$pdf->Output();
?>
이 예제는 Header() 와 Footer() 메소드를 이용하여 페이지의 헤더와 푸터를 처리하고 있다. Header() 와 Footer() 메소드는 자동으로 호출되며, 이미 FPDF 안에 구현이 되어있으나 그 안에 있는 것은 아무런 역할도 하지 않는다. 따라서, 클래스를 상속받아서 오버라이드 해야한다.
로고는 Image() 메소드에 왼쪽, 상단의 위치와 너비를 주어서 출력했다. 높이는 이미지의 비율에 맞게 알아서 계산된다.
페이지 번호를 출력하기 위해서 너비를 주고 빈 셀을 출력했다. 이것은 곧 셀의 오른쪽 여백이 그 너비만큼 늘어났다는 것을 의미하며, 텍스트를 중간에 위치시키기 위해서 사용되었다. 현재 페이지의 번호는 PageNo() 메소드의 리턴값을 통해 얻을 수 있고, 전체 페이지번호를 얻으려면, {nb}라는 값을 전체 페이지를 출력하고자 하는 위치에 출력한다음, AliasNbPages() 메소드를 실행한다.
SetY() 메소드를 이용하면, 페이지의 상단 혹은 하단을 기준으로 하는 절대좌표를 설정할 수 있다.
다른 흥미로운 기능은 자동 페이지 넘김이다. 셀이 페이지의 범위(하단으로부터 2cm이 기본값)를 넘어가면, 페이지가 자동으로 바뀌며, 글꼴 설정도 복원된다. 그래서 헤더와 푸터가 Arial 폰트로 출력되어도 본문은 계속 Times 로 출력되는 것이다. 이 자동 복원 기술은 색상과 선 굵기에도 적용된다.
자동으로 페이지가 바뀌는 영역은 SetAutoPageBreak()으로 설정할 수 있다.
________________________________________
이 글은 fpdf.org 의 tutorial 을 번역하고 일부 추가한 내용입니다.
한번 해보았습니다. 헌데 다음과 같은 에러가 나는군요 ^^
Parse error: parse error, unexpected ';', expecting ')' in g:htdocspdfimage_insert(demo).php on line 38
코드 36번 줄의 코드가 잘못되어 있군요
for($i=1;$iCell(0,10,'Printing line number '.$i,0,1);
원본 tutorial 에는
for($i=1; $iCell(0, 10, 'Printing line number '.$i, 0, 1);
}
좋은 도움 글 감사합니다.
헉~ 입력처리를 제대로 받지 못하네요.
http://www.fpdf.org/en/tutorial/tuto2.htm 참조하시길~
WP가 가끔 <에 대해서 먹어버리는 경우가 있어서 그런 것 같습니다. ^^;; 알려주셔서 고맙습니다. (__)