FPDF – PHP로 PDF 만들기 2

목차

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 을 번역하고 일부 추가한 내용입니다.

  1. 한번 해보았습니다. 헌데 다음과 같은 에러가 나는군요 ^^

    Parse error: parse error, unexpected ‘;’, expecting ‘)’ in g:htdocspdfimage_insert(demo).php on line 38

  2. 코드 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);
    }

    좋은 도움 글 감사합니다.

댓글을 남겨주세요