Cuma, 14 Ağustos 2009

PDF Dosya Çıktısı Almak

 

Internet uygulamalarında bazen sonuçlar ekrana bastırmak yerine PDF formatında dosylara bastırmak gerekebilir. Genelde alışveriş sitelerinde fatura uygulamalarında gerekli olan bu durum için PHP üzerinde yazılmış hazır sınıflar mevcuttur. Bu yazımda pdf sınıflarından biri olan TCPDF`in CodeIgniter üzerine aktarılması konusunu alatacağım.

Bu sınıfın CodeIgniter`a entegrasyonu Jonathon Hill tarafından hazırlanmış ve Wiki syfalarında yayımlanmıştır. Bu yazıda kurulum sırasında yaşadığım tecrübeleri anlatıp, dikkat edilmesi gereken noktaları da belirterek entegrasyonun nasıl çalıştıtıldığını anlatmak istiyorum. TCPDF`in nasıl kullanılacağını en iyi kendi sayfasındaki örneklerden öğrenebilirsiniz.

Birinci adım olarak TCPDF`in sayfasından kullandığımız PHP versiyonuna göre ilgili dosyaları bilgisayarımıza indiriyoruz ve bu dosyaları application dizini altına açacağımız 3rdparty/tcpdf dizini altına kayıt ediyoruz. Böylelikle çağıracağımız plugini application dizini altına almış olduk. Daha sonra buradaki adresten iki dosya indiriyoruz ve tcpdf.php dosyasını application/config dizini altına, pdf.php dosyasını application/libraries altına kopyalıyoruz.

Application/config dizini altındaki tcpdf.php dosyası TCPDF kütüphanesi içinde kullanıcının değiştireceği değerleri içermektedir. Bu dosyadaki her değeri isteğimize göre değiştirebileceğimiz gibi öncelikle 40. satırı kendimize göre değiştiriyoruz:

 $tcpdf['base_url'] = 'http://sidearesi/alt_dizin/'.APPPATH.'3rdparty/tcpdf/';

Daha sonra application/controllers dizini altına pdf_test.php isimli controller dosyamızın içine TCPDF`in kendi sayfasında örnek olarka veridiği aşağıdaki kodları yazarak ekliyoruz:

class pdf_test extends Controller {

    function pdf_test()
    {
        parent::Controller();
    }

    function tcpdf()
    {
        $this->load->library('pdf');

        // doküman bilgilerini ayarlıyor
        $this->pdf->SetSubject('TCPDF Tutorial');
        $this->pdf->SetKeywords('TCPDF, PDF, example, test, guide');
        
        // font ayarlıyor
        $this->pdf->SetFont('times', 'BI', 16);
        
        // sayfa ekliyor
        $this->pdf->AddPage();
        
        // Cell() komutu ile yazı ekliyor
        $this->pdf->Cell(0, 12, 'Example 001 - €à èéìòù', 1, 1, 'C');
        
        //PDF dokümanını kapatıp yazdırıyor
        $this->pdf->Output('example_001.pdf', 'I');        
    }
}

Şimdi bu test controller dosyasını çağırdığımızda (http://sidearesi/alt_dizin/pdf_test/tcpdf), oluşturduğumuz pdf dosyası ekrana basılacaktır. Ancak ben denediğimde "K_CELL_HEIGHT_RATIO değeri bulunamadı" hatası aldım. Bunu düzeltmek için ise application/3rdparty/tcpdf dizini altındaki tcpdf.php dosyasının 940. satırını kapattım.

//  protected $cell_height_ratio = K_CELL_HEIGHT_RATIO;

Ancak bunun ardından bende sorunsuz çalıştı. Hızlı vçalışması e öğrenimi kolay bir kütüphane olan TCPDF`i, PDF çıktılarınız için kullanmanızı tavsiye ederim.

@14 Kasım 2009: Çalışan uygulamayı görmek, yazdığınız bir mesajın PDF çıktısını alabilmeniz için örnek ekledim. Türkçe sorunu yaşayanlar için TCPDF paketinden çıkan dejavusans isinli fontu kullanmanızı öneririm.

@29 Aralık 2009: Çalışan uygulamayı kodlarını zip olarak siteye ekledim. Buradan indirebilirsiniz. TCPDF uygulaması, lisansı nedeniyle bu pakete dahil değildir.

Yorumlar

merhaba

hazırladığınız makale çok işime yaradı ve çalışıyor. fakat ufak bir sorun var. türkçe karakter sorunu yaşıyorum. ğ, ş ve I harfleri yerine soru işareti geliyor. Bunun olacağını hazırlarken tahmin etmiştir. peki bu sorunu nasıl aşabilirim? tcpdf'in font klasörüne baktım fakat biraz karışık geldi... yardımcı olursanız sevinirim.

@İlker: Türkçe font sorununu gidermek için yazıda geçen times fontu yerine TCPDF paketinden çıkan dejavusans fontunu kullanabilirsin.

Türkçe karakter problemini çözemedim dejavusans deniyorum oda olmuyor. siz yaptığınız örneği download etme imkanı sunabilirmisiniz fatih bey. teşekkürler..

@Ahmet: Kodlar sitede yayımlandığı gibidir. Türkçe sorunu için forumdaki mesajları takip ediniz.

Merhaba, yukarıda demoda çalışan örneği zip leyerek bana e-posta ile gönderebilir misiniz acaba?

Bu şekilde deneme yanılma yapamıyorum. :(
php bilgim var fakat bu işten böyle anlaşılır bir bilgi çıkaramadım.
mail adresim: delphpin@gmail.com
teşekkürler.

@delphi: Çalışan uygulamanın kodlarını zipleyip siteye ekledim. Umarım işinizi görür.

Karşılaşılan olası türkçe karakter sorunu kullanılan font ve sayfa kodlaması ile alaklı olabilir. Bunlara dikkat edersek hiç sorun olmaz.

http://tayyar-code.blogspot.com/2009/04/fpdf-httpwww.html

Yorum Ekle