22 Mayıs 2013

Php pdf oluşturma, fpdf

Html sayfalarında php dili ile pdf dosyası oluşturmak hakkında bir örnek verelim. Php oluşturmak için birkaç popüler kütüphane :

-fpdf
-tcpdf (fpdf kütüphanesi üzerine kurulu)
-dompdf
-cezpdf

Örneğimizde en yaygın olan fpdf kütüphanesini kullanacağız. http://www.fpdf.org/ sitesine girip kütüphaneyi indiriyoruz.

Fpdf kütüphanesini kullanmamızın nedeni işlem hızı ve dosya boyutlarıdır.

2000 pdf dosyası işleme süresi :
fpdf  -> 17.0366 saniye
tcpdf -> 79.5982 saniye

diğer kütüphanelerin bilgileri elimde yok ama fpdf'e göre daha yavaş olduklarından eminim :) tcpdf ile tanımlı daha çok fonksiyon bulabilirsiniz; fakat fpdf ile de kendi metotlarınızı oluşturmanız çok zamanınızı almaz ;) Mesela örneğimizde güzel bir sayfa başlığı oluşturduğumuzu göreceksiniz :p



Örneğimizde
- sayfa başlığı
- sayfa alt bilgisi
- tablo oluşturma
konularını ele alacağız. Öncelikle kodu verelim :) (En alttada rar dosyası mevcut) Kod içerisinde gerekli açıklamalar mevcut. Bu kodu fpdf klasörünün içerisinde dosyadi.php dosyası içine kopyalayıp çalıştırabilirsiniz. Sadece fpdf klasörünün içine  logo.png dosyası bırakmanız yeterli.

Koddan sonra multicell() fonsiyonuna değinmek istiyorum...


<?php         

    require('fpdf.php');
  
    class PDF extends FPDF
    {
        // Sayfa başlığı
        function Header()
        {      
            
            // Logo ayarlanır
            $this->Image('logo.png',10,6,20);
            
            // Yazı rengi ayarlanır
            $this->SetTextColor(0,0,140);
            
            // Satır 25 pixel içeriden başlasın
            $this->Cell(25);

            // Satıra yazı yazılır
            $this->Write (2, 'Php ile pdf olusturma'); 
            
            // 4 pixel aşağıda yeni satıra geç
            $this->Ln(4);
            
            // Satır 25 pixel içeriden başlasın
            $this->Cell(25);  
            
            // Arial italic 8
            $this->SetFont('Arial','',8); 
            // Yazı rengi ayarlanır 
            $this->SetTextColor(51,0,102);
            // Satıra yazı yazılır
            $this->Write (10, 'Kod Yaz-Ma');
            // 15 pixel aşağıda yeni satıra geç
            $this->Ln(5);
            
            // Satır 25 pixel içeriden başlasın 
            $this->Cell(25);  

            // Satıra yazı yazılır
            $this->Write (10, 'kodyazma.blogspot.com', 'http://kodyazma.blogspot.com/');
            // 10 pixel aşağıda yeni satıra geç
            $this->Ln(10);
            
            // X koordinatı
            $x = $this->GetX();
            // Y Koordinatı 
            $y = $this->GetY();
            // Düz çizgi çizilir
            $this->Line( $x, $y , $x + 185, $y ); 
            
            // 5 pixel aşağıda yeni satıra geç 
            $this->Ln(5);
        }

        // Sayfa Altı
        function Footer()
        {
            // 15 pıxel sayfa altından yukarıda başla
            $this->SetY(-15);
            // Arial italic 8
            $this->SetFont('Arial','I',8);
            // Sayfa Numarası
            $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
        }
        
        // Renkli tablo
        function FancyTable($header, $data)
        {
            
            // Renkler ve yükseklikler ayarlanır
            $this->SetFillColor(51,153,255);
            $this->SetTextColor(255);
            $this->SetDrawColor(128,0,0);
            $this->SetLineWidth(.3);

            // Satırın X ve Y koordinatları alınır
            $posX = $this->GetX();
            $posY = $this->GetY();
            
            // Yazı fontu ayarlanır
            $this->SetFont('Arial','',12); 
            
            // Tablonun en üst satırı (başlık kısmı)
            // Her kolonun pixel boyutu ayarlanır
            $w = array(30, 25, 25);
            for($i=0;$i<count($header);$i++)
            {          
                $this->MultiCell($w[$i],6,$header[$i],1,'C',true);
                // Bir sonraki hücrenin X koordinatı bir önceki kolonun pixel sayısı eklenerek hesaplanır
                $posX +=  $w[$i];
                
                $this->SetXY($posX, $posY);
            }
                
            $this->Ln(12);
            
            $this->SetFillColor(224,235,255);
            $this->SetTextColor(0);

            // Bilgiler
            $fill = false;
            foreach($data as $row)
            {
                $this->Cell($w[0],6,$row[0],'LR',0,'C',$fill);
                $this->Cell($w[1],6,$row[1],'LR',0,'R',$fill);
                $this->Cell($w[2],6,$row[2],'LR',0,'R',$fill);
                $this->Ln();
                $fill = !$fill;
            }
            // Satır kapatılır
            $this->Cell(array_sum($w),0,'','T');
        }  
    }
    
    // Pdf nesnesi oluşturulur
    $pdf = new PDF();
    
    // Sayfa altında numaraları göstermek için kullanılır
    $pdf->AliasNbPages();
   
    // font ayarlanır
    $pdf->SetFont('Arial','',14);
    
    
    // Başlık için array olusturulur
    $header = array('Sehir (ikinci satira gecmek)', 'Plaka Numarasi', 'Telefon Kodu');
    
    // Bilgiler eklenir
    $data = array();
    array_push($data, array('Ankara', 06, 312)); 
    array_push($data, array('Istanbul (Avr)', 34, 212));
    array_push($data, array('Istanbul (And)', 34, 216));    
    array_push($data, array('Izmir', 35, 232));

    // sayfa eklenir
    $pdf->AddPage();
    // Başlıklar ve bilgiler tabloya yollanır
    $pdf->FancyTable($header,$data);
    
    $pdf->Ln(); 
    for($i=1;$i<=40;$i++)
        $pdf->Cell(0,10,'satir numarasi '.$i,0,1);
    
    
    $pdf->Output();     
?>
fpdf, Cell() alt satıra nasıl geçilir?
Cell() fonksiyonunda alt satıra geçiş yok.
Multicell() fonksiyonunu kullanmamın nedeni, başlık uzun olduğu zamanlarda alt satıra geçebilmeyi sağlamaktır. Eğer bazı hücreleriniz kısa ise alt satıra otomatik geçmeyecektir. Onun için başlık yazısının yanına boşluk bırakabilirsiniz.


fpdf kütüphanesiyle birlikte yaptığımız örneği buradan indirebilirsiniz

Bir sonraki makalede dil (türkçe karakter) eklemeyi göstereceğim.

Varsa yazım hatalarımız ve bilgi hatalarımız ya da eksikliklerimiz affola :) Umarım yardımcı olabilmişimdir...

Düzenleme (Aralık 2016) : Türkçe karakter sorunu çözümü için linkteki makaleye bakabilirsiniz.
http://www.kodyazma.com/2016/12/php-fpdf-kutuphanesinde-turkce-karakter-sorunu-cozumu.html

Bu Blogda Ara

İletişim

Ad

E-posta *

Mesaj *