PHP ile PDF dosya oluşturmak yine bir ihtiyaçtan ötürü araştırıp elde ettiğim bilgilerle buraya sunacağım makale olacak. Php ile yeni bir pdf dosyası oluşturmak için bir pdf kütüphanesine ihtiyacımız var. Php manuel’de de göreceğiniz üzere pdf kütüphanesini PDFlib yani http://www.pdflib.com/products/pdflib/index.html adresinden kolaylıkla edinebilirsiniz.
İçerik Haritası
PHP ile PDF Oluşturmak, Yazmak ve İşlemler
İlk olarak PDF_new(); fonksiyonunu kullanarak pdf işlemleri için sınıfı çağırıyoruz. Ardından PDF_open_file() metodu ile belirtilen isimde bir pdf dosyası oluşturmamız mümkün.
$var = PDF_new();
int PDF_open_file([pdf nesnesi], [dosya_adı]);
Burada dosya_adı parametresi, eğer daha önce oluşturduğunuz bir pdf dosyası varsa onu açmanıza yarar. Ancak bu parametre belirtilmezse işlem yapabilmeniz için yeni bir pdf dosyası oluşturacaktır.
$pdf = PDF_new(); PDF_open_file($pdf);
Bu iki fonksiyon aracılığıyla pdf dosyanızı oluşturma aşamasından sonra işlemler yapmaya başlayabiliriz. İlk olarak tanımlayacağımız şey “Document information” yani doküman bilgileri olacak. (Yazar,başlık ,konu vs)
PDF_set_info([pdf_object], [property string], [value]);
Yukarıdaki fonksiyon ile pdf dosyamıza , dosya bilgilerini girmemiz sağlanıyor olacak.
PDF_set_info($pdf, "author", "John Coggeshall"); PDF_set_info($pdf, "title", "Zend.com Example"); PDF_set_info($pdf, "creator", "Zend.com"); PDF_set_info($pdf, "subject", "Code Gallery Spotlight");
Author : Belge Sahibi
Title : Belgenin başlığı
Creator : Oluşturucu, Yazar
Subject : Konu
Pdf dosyasını oluşturduktan hemen sonra doküman bilgilerini böylece tamamlıyoruz. Ardından PDF_begin_page() fonksiyonu aracılığıyla dosyamızın içinde artık belgeye ait ilk sayfayı oluşturabiliriz.
PDF_begin_page([pdf object], [page width], [page height]);
Bu fonksiyona ise daha önce oluşturulan pdf nesnesini tanımladıktan sonra sayfa genişliği (page width) , sayfa yüksekliği (page height) değerlerini giriyoruz.
PDF_begin_page($pdf, 500, 500);
Not: Burada 500 değeri pixel değil point olarak verilir, değer vermeyin otomatik algılasın.
Artık içerisine bir şeyler yazabiliriz ancak yazmadan hemen önce belge içerisinde kullanacağımız fontu seçme imkanı da sunuluyor. Bunu da kullanmak için PDF_findfont() ve PDF_setfont() fonksiyonlarına tanımlamalar yaparak fontları belirleyebiliriz. Daha önce tanımlanan fontları kullanmak veya yeni bir font atamak için bunlar kullanılabilir.
Pdf belgeleri için kullanabileceğimiz ön tanımlı olarak gelen fontlar ;
Courier, Courier-Bold, Courier-Oblique, Courier-BoldOblique
Helvetica, Helvetica-Bold, Helvetica-Oblique, Helvetica-BoldOblique
Times-Roman, Times-Bold, Times-Italic, Times-BoldItalic
Symbol, ZapfDingbats
Bun fontların haricinde kendi fontlarımızı da kullanabiliriz elbette.
int PDF_findfont([pdf object], [fontname], [encoding],[ embed ]) //embed'in sağı ve solundaki boşlukları silin
$font = PDF_findfont($pdf, "Helvetica-Bold", "winansi",0);
Bu aşamada font değişkenine Helvetica-Bold fontunu tanımlıyoruz. Bu gibi pek çok font tanımlaması yapabilir, daha sonra bunları PDF_setfont() ile değiştirip kullanabiliriz.
PDF_setfont($pdf, $font, 12);
Burada geçerli olan fontu $font değişkeninde tanımladığımız font olarak güncelledik.
İçerisindeki yazıların pdf belgesinin içindeki sayfalara bir bir basılmasını sağlayan fonksiyon ise ;
PDF_show_xy([pdf object], [string], [x value], [y value]);
Burada ise yazılacak olan veriyi x ve y koordinatları belirtilerek görünmesini sağlıyoruz.
PDF_show_xy($pdf, "Hello, Dynamic PDFs!", 5, 225);
Bu işlem sayesinde oluşturduğumuz belgeye yazıyı tanımladık. Artık bu sayfayı sonlandırmak kalıyor.
PDF_end_page([pdf object]);
bu kod ile de üzerinde çalıştığımız belgeyi sonlandırabiliyoruz.
Son adımda PDF_begin_page() fonksiyonunu yeniden çalıştırıyoruz ve birden fazla sayfa içeren pdf belgelerini oluşturuyoruz.
Sayfaları oluşturma işlemi sona erdiğinde ise PDF_close($pdf); ile tüm pdf belgeleri kapatılacaktır. Bunu curl işlemini sonlandırmak gibi düşünebilirsiniz ya da bir dosyayı açıp işledikten sonra kapatmak gibi.
Ziyaretçiye gösterme adımı
Artık pdf belgemizi web sayfamızda oluşturuyorsak ziyaretçiye göndermek , ardından da hafızadan temizleme yapmak gerekiyor.
Php ile pdf header bilgilerini oluşturarak belgenin tarayıcılarda açılmasını , kayıt edilebilmesini sağlayabiliriz. Bunun için ilk olarak doküman boyutunu alıyoruz. Bunu da PDF_get_buffer() fonksiyonu ile yapıyoruz.
$buffer = PDF_get_buffer($pdf);
$buffer = PDF_get_buffer($pdf);
Artık buffer bilgisi de elimizde. Headerleri oluşturduktan sonra belgeyi yollayabiliriz.
header(“Content-type: application/pdf”);
header(“Content-Length: “.strlen($buffer));
header(“Content-Disposition: inline; filename=zend.pdf”);
Burada yer alan başlıklar tarayıcıya , bu belgenin bir pdf formatında dosya olduğunu anlatır. Artık sonrası kullanıcının tercihine göre tarayıcıda veya pdf dosyası açan adobe reader yardımı ile açılacaktır. veya kaydet penceresi çıkacaktır böylece kaydedebilecek. Ardından “Content-Disposition” olarak başlıktan sonraki “zend.pdf” ise bilgisayara inecek belgenin adı olacak.
Son olarak da PDF_delete($pdf); ile pdf belgesini hafızadan tamamen silebiliriz.
PHP ile PDF Oluşturmak, Yazmak ve İşlemler Örnek
<?php $p = PDF_new(); if (PDF_begin_document($p, "", "") == 0) { die("Error: " . PDF_get_errmsg($p)); } PDF_set_info($p, "Creator", "hello.php"); PDF_set_info($p, "Author", "Rainer Schaaf"); PDF_set_info($p, "Title", "Hello world (PHP)!"); PDF_begin_page_ext($p, 595, 842, ""); $font = PDF_load_font($p, "Helvetica-Bold", "winansi", ""); PDF_setfont($p, $font, 24.0); PDF_set_text_pos($p, 50, 700); PDF_show($p, "Hello world!"); PDF_continue_text($p, "(says PHP)"); PDF_end_page_ext($p, ""); PDF_end_document($p, ""); $buf = PDF_get_buffer($p); $len = strlen($buf); header("Content-type: application/pdf"); header("Content-Length: $len"); header("Content-Disposition: inline; filename=hello.pdf"); print $buf; PDF_delete($p); ?>