Thursday, April 23, 2009

php ve pdf düzenleme, türkçe font sorunu, [fpdf, pdfb ve tcpdf kütüphaneleri]



fpdf (http://www.fpdf.org/) php ile pdf işleme konusunda birebir. harika bir class.
geçenlerde fdf  tabanı kullanarak (ve bir kaç ek kütüphane ile) geliştirilmiş pdfb (http://chir.ag/projects/pdfb/) paketine rastladım.barkod ekleyebiliyor ve pdf şablonlar oluştutup dinamik verilerle bu şablonlardan yeni pdf dosyalar oluşturabiliyorsunuz.

pdfb ile iki sorun çıktı karşıma

1. Hata : pdfb FPDF error: Unable to find xref table - Maybe a Problem with 'auto_detect_line_endings'

bu hatanın temel nedeni olarak pdfb nin eski fpdf sınıfı kullanması olabileceğini düşündüm. içindeki fdpdf sınıfını güncelledim. ancak hata devam etti. meğer hata pdf dosyasının oldukça yeni bir header türü içermesindenmiş. yani kısaca acrobat reader uyumluluğu eski değil, yeni pdf reader lara göre ouşturulmuş. pdf dosyamı tekrar oluşturdum fakat bu defa acrobat reader 6 uyumlu olarak sakladım. birinci sorunum çözüldü!

2. fpdf türkçe karater sorunu
bu sorunu hala çözemedim. kullandığım font dosyası (times.php) türkçe karakter içermiyor olabilir belki diye http://fpdf.fruit-lab.de/ adresinden tekrar oluşturdum fakat hala sorun devam etmekte.
--
ek
iki gün sonunda buldum. PDFB ve FPDF için utf8 karakter sorununu şu şekilde çözdüm (daha dar ifadeyle fpdf türkçe karakter sorunu).
1.http://fpdf.fruit-lab.de/ adresinden iso-8859-9 olarak TR kartakterleri de kapsayan bir fontu çevirdim.
2. Elde ettiğim "z" ve "php" dosyalarını yükledim.
3. pdf oluştururken bu fontu kullandım. şöyleki:
$pdf->AddFont('times','','times.php');
$pdf->SetFont("times", "", 10);

4. (Bu aşamada hala sorunlarım devam etti). pdf çıktısı üreten sayfayı utf8 olarak kaydettim
5. pdf de görünecek olan tüm string verilerimi iu fonksiyon le iso-8859-9 olarak kodladım.

function trsuz($str){
$str=mb_convert_encoding($str, "ISO-8859-9","UTF-8");
 return $str;
  }

 


Artık sorunum kalmadı. mysql den utf8 olarak aldığım string veriler sorunsuzca fpdf ile pdf dosyasında görünmekte :)

Yukarıda bahsi geçen font oluşturma işlemi ile uğraşmak istemezseniz yukarıdaki ben "times" için oluşturdum. Sadece indirip "pdfb\fpdf_fpdi\font" dizini içine açınız. http://sacrosancttayyar.googlepages.com/font.rar

14 comments:

Kerem said...

Teşekkürler. Çok işime yaradı.

imleme said...

eyvallah hocam bizi sıkıntıdan kurtardın

Hasan Tayyar Beşik said...

eyvallah sevindim yardımcı lduğuma

blueromans said...

Hocam merhaba $this->AddFont('tr_arial','arial.php');
sonucu
FPDF error: Could not include font definition file bu hata dönüyoo. Yardımcı olmanız mümkün mü

Hasan Tayyar Beşik said...

İki dosyanın da bulunduğundan emin olun "arial.php"ve "arial.z"

SERDAR TAYLAN said...

times bold yazdırmak istediğimde tr kararterleri yazdıramıyorum yardım edebilirmisiniz
serdartaylan -at- gmail -dot- com

Anonymous said...

dostum ALLAH razı olsun senden o kadar uğraştım yapamadım senin yazın sayesinde yaptım.

kudret akifoğlu said...

Çok teşekkür ederim. Çok işime yaradı.

ismail said...

eyv hocam. yana yakıla bununla uğraşıyordum bu süper oldu. eline sağlık.

akececi said...

Hocam unicode font yuklenince text-align: justify problemi oluyor. Bununla alakalı bir problem yaşayan ve çözen varmıdır acaba ?

Hasan Tayyar BESIK said...

Kütüphaneyi güncelleyince düzeliyor olmalı. Changelog'da belirtilmişti en son.
Bir dener misiniz?,

akececi said...

Hocam önerebileceginiz html2pdf yapan bir kutuphane var mı?

http://html2pdf.fr/en/default adresindekini kütüphanede bahsettiğim justify sorunu var. Maalesef problemi bir türlü aşamadım.

Hasan Tayyar BESIK said...

fpdf e gore daha yeni ve populer https://github.com/dompdf/dompdf tavsiye edebilirim.

tolga said...

tayyarcım adamsın adam