PHP ile PDF Yazdırmak – FPDF

30 Kasım 2009

fpdfEşim Meryem’in yayıncılık işlerine teknolojik destek vermek amacıyla 2009’un yaz aylarında Online Soru Bankası ve Online Sınav Üreteci uygulamaları geliştirdim. Amaç İngilizce ilköğretim öğretmenlerine diledikleri ünitelerden diledikleri sayıda sorudan oluşan sınavları Online Soru Bankası’ndaki sorulardan üretmeleri. PHP ile geliştirmiş olduğum uygulamadan üretilen sınavların yazıcı çıktısına müsait olabilmeleri için PDF olarak öğretmenlere sunulması gerekiyordu.

Önce hosting firmasının sunucusundaki PHP yorumlayıcısında PDF eklentisinin olmadığını öğrendim. Bu nedenle hosting firması değiştirmem gerekeceğini düşünmeye başladım. Ancak biraz daha araştırınca sadece PHP ile geliştirilmiş ve herhangi bir C PDF kütüphanesi ihtiyacı duymadan PDF formatında çıktı üretebilen bir PHP projesi ile tanıştım: FPDF.

FPDF basit yazabilen bir PHP sınıfından ibaret bir proje. Bu sınıfı genişleterek kendi projenize uygun PDF çıktısı üretecek yeni bir sınıf yazarak kullanmanız gerekiyor. Böylece PDF dökümanının dinamik bir şekilde yazılması sürecinin tamamına (mesela yeni sayfaya geçilmesinde yapılacak işlemlere) müdahale edebiliyorsunuz.

<?php
require('fpdf.php');

class PDF extends FPDF
{

function Header()
{
    // her yeni sayfanın üst kısmına yazılacak
    $this->SetFont('Arial','B',16);
    $this->SetTextColor(255,192,203);
    $this->MultiCell(0,5,"sample header text",0,'L');
}
}

$pdf=new PDF();
$pdf->AddPage();
$pdf->SetFont('Arial','',12);
$txt="FPDF is a PHP class which allows to generate PDF files with pure PHP, that is to say ".
    "without using the PDFlib library. F from FPDF stands for Free: you may use it for any ".
    "kind of usage and modify it to suit your needs.\n\n";
for($i=0;$i<25;$i++)
    $pdf->MultiCell(0,5,iconv('utf-8', 'iso-8859-9', $txt),0,'J');
$pdf->Output();

?>

Türkçe True Type fontları da FPDF’in kullanabileceği formata dönüştürerek sorunsuz Türkçe karakter yazdırmanız mümkün oluyor. Üretilen PDF’lere bu fontlar da gömülüyor ve her PDF gösterebilen ortamda sorunsuz bir şekilde Türkçe karakterleri gösterebiliyor. Tek dezavantajı UTF-8’den anlamıyor. Türkçe yazdırmanız gereken herşeyi iso-8859-9 formatında yazdırmanız gerekiyor. Normalde UTF-8 kodlaması kullandığım için bu durum benim için büyük bir problem olarak karşıma çıktı. Ancak iconv() işlevi yardımıma koştu. Veritabanından okuttuğum tüm UTF-8 içeriğini iconv() ile iso-8859-9’a dönüştürerek FPDF yardımı ile PDF’e yazdırdım.

Basit PDF yazdırma dışında ihtiyacım olan gelişmiş özellikler için ise yine www.fpdf.org‘daki scriptler yardımıma koştu. Her birisinin ayrı ayrı yetenekleri olan onlarca script FPDF’in özelliklerini ve yeteneklerini genişletmektedir. Örneğin çapraz yazı yazmak için Rotation script’i kullanılabilir. Benim amacım çapraz silik yazı yazarak watermark oluşturmak olduğu için Watermark script’i işimi gördü. Bunun yanında PieChart türünde bazı grafikler çizme ihtiyacım olduğu için Sector script’ini de kullandım. Öğretmenlerin sadece çıktı alabilmeleri için PDF Security de uygulama ihtiyacım vardı. Bu nedenle Protection script’ini de projeye dahil ettim.

Üretilen sınav sayfasında her bir sorunun resmi/resimleri ile beraber cevap şıkları da dahil olarak ne kadar yer kaplayacağı önceden bilinemiyor. Bu nedenle oluşturduğum PDF üreteci sınıfın geçici bir instance’ı ile PDF sayfası hazırlıyor ve artan boşluğu hesaplıyorum. Böylece yeni yazılacak olan sorunun ne kadar yer kaplayacağını önceden hesaplamış oluyorum. Buna göre de sayfa yapısında sorular arasında eşit miktara boşluk bırakarak soruların dengeli ve düzenli bir şekilde yerleştirilmesini sağlıyorum. Bu hesaplama bana iki kez PDF oluşturma maliyeti getiriyor. Ancak bu durum bu güne kadar bir performans sorununa neden olmadı.

FPDF’in PDF yazma performansı oldukça yüksek. 5 sayfalık bir PDF’i günümüz için orta güçte olan bir bilgisayarda 0.5 saniyede yazabilmekte. PDF security uygulandığında ise aynı PDF yaklaşık 7 saniyede üretilebilmekte.

FPDF’in oldukça iyi bir dökümantasyonu var. İngilizce sıkıntısı yaşayanlar için dökümantasyonun Türkçe tercümesi Çağlar Ülküderner tarafından yapılmış.

FPDF’i iş başında görmek ve ürettiği sonucu yakından incelemek için sınav üretme demo’sunu http://www.successatenglish.com‘dan gerçekleştirebilirsiniz. Öğretmen Girişi sayfasından Demo Girişi bağına tıklamanız demo kullanıcısı ile oturum açmanız için yeterlidir.

PHP’den PDF üretme ihtiyacı olanlara FPDF’i şiddetle öneririm.

Etiketler: , , , ,

  1. “PHP ile PDF Yazdırmak – FPDF” için 9 Yorum

  2. erkin diyor ki:
    09 Şubat 2010 tarihinde.

    mkfont kullanma tembelleri için bir iki font’da atıverseydiniz ya. Pek makbule geçerdi.

  3. güvenlik, kamera sistemleri diyor ki:
    29 Temmuz 2010 tarihinde.

    sıfırdan nasıl oluşturabiliriz?
    ve içerisini nasıl düzenleriz ??

  4. kayzen diyor ki:
    11 Ağustos 2010 tarihinde.

    hoca cok kasmıısın yazında essahdan bırseyler yapmıs gıbı ama sıstemın hıc kullanıslı deıl bunu benım 10 yasındakı bıraderımde yazardı yanı

  5. Nurettin YILMAZ diyor ki:
    09 Kasım 2010 tarihinde.

    Bir yıldır bir şey yazmamışsın?…
    hayırdır. Konular mı bitti?

  6. ibrahim cetin diyor ki:
    11 Kasım 2010 tarihinde.

    Sezai bey yazdıklarınız için teşekkür ederiz.Örnek kodları uyguladım fakat türkçe karakter sorunun çözemedim bu konuda yardımcı olursanız cok sevinirim.

  7. Abdüssamet diyor ki:
    06 Şubat 2011 tarihinde.

    aaa ben bilyiorum…

    babam ingilizce öğretmeni eşinizde…

    eşinizin yazdığı kitabı kullanmıştık vandayken…

    succestosbs.com çok güzel hazırlanmıştı ben de merak ettim nasıl yapılıyor diye…

  8. Süleyman Açık diyor ki:
    14 Ağustos 2011 tarihinde.

    Sezai bey sitenizi inceledim gayet güzel hazırlanmış. Acaba kullandığınız fpdf scriptini paylaşmanız mümkün mü?

  9. alhan diyor ki:
    29 Ağustos 2012 tarihinde.

    Merhaba,

    yeni versiyonunda utf-8 destekliyormuş

    bilginize

  10. gürkan diyor ki:
    22 Ocak 2013 tarihinde.

    Elinize sağlık, çok güzel bir paylaşım olmuş. Reklamlara tıklamayı ihmal etmedim.. 🙂

Yorum Yapın