Merhaba, bu yazımda sizlere PHP”de gerçekten zor ve bazen de sinir bozucu olan PHP ile PDF Dosya Oluşturmak konusundan bahsetmek istedim.
PHP’ye yeni başlayanlar hatta uzman derecede PHP bilenlerin dahi zorlandığı konulardan bir tanesidir. .NET benzeri dillerde PDF dosya oluşturmak için bir çok component bulunmakta. Ancak PHP için ne yazıkki yanı şeyi söylemek pek de mümkün değil. PHP ile PDF Dosya Oluşturmak için yazılan bir kaç eklenti bulunmakta. Bu yazımda bunlardan bir tanesinin detaylı anlatımını sizlere yapmak istiyorum.
Eklentinin adı TCPDF
TCPDF Kullanarak PHP ile PDF Dosya Oluşturmak
Öncelikle belirmek isterim ki eklenti herhangi CSS Frameworkunu desteklememekte. Dolayısı ile inline CSS yazmak bu eklenti için en mantıklı olan yol. Eklentinin web sitesine giderek tam dokümanına ulaşabilirsiniz. TCPDF dökümanı için tıklayın
Temel bilgileri öğrendikten sonra kodu vermeden bazı uyarıları yapmakta fayda görüyorum.
TCPDF Türkçe Karakter Eklemek
Eklentiyi indirdikten sonra 30. satırlarda
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT
Satırına benzer bir kod göreceksiniz. Eklentinin orjinal halinde UTF-8 ve Türkçe karakter fontları çalışmıyor. O nedenle Bu satırı;
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
Bu kodla değiştirmeniz gerekmekte.
TCPDF ERROR: Some data has already been output, can’t send PDF file hatasının çözümü
Bu hata bu eklentide en çok alınan hatalardan bir tanesidir. Kodların içine gömülüp sonunda bir kaç saatinizi vermenize rağmen çözemeyebilirsiniz. Hatanın çözümü için eklentinin içinde yer alan tcpdf.php dosyasının en sonuna
ob_clean();
kodunu eklemeniz gerekmektedir.
PHP PDF Oluşturmak
Uyarılarımızdan sonra geldik işimize lazım olan kodlara. Eklentiyi indirdikten sonra hiç uğraşmadan ana dizine atın. Daha sonra,
examples klasörünün içerisine faturaindir.php isminde bir dosya oluşturup içerisine
<?php //============================================================+ // File name : example_001.php // Begin : 2008-03-04 // Last Update : 2013-05-14 // // Description : Example 001 for TCPDF class // Default Header and Footer // // Author: Nicola Asuni // // (c) Copyright: // Nicola Asuni // Tecnick.com LTD // www.tecnick.com // info@tecnick.com //============================================================+ /** * Creates an example PDF TEST document using TCPDF * @package com.tecnick.tcpdf * @abstract TCPDF - Example: Default Header and Footer * @author Nicola Asuni * @since 2008-03-04 */ // Include the main TCPDF library (search for installation path). require_once('tcpdf_include.php'); // create new PDF document $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); // set document information $pdf->SetCreator(''); $pdf->SetAuthor(''); $pdf->SetTitle(''); $pdf->SetSubject(''); $pdf->SetKeywords(''); // set default header data $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' ', PDF_HEADER_STRING, array(0,64,255), array(0,64,128)); $pdf->setFooterData(array(0,64,0), array(0,64,128)); // set header and footer fonts $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); // set default monospaced font $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); // set margins $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); $pdf->SetHeaderMargin(PDF_MARGIN_HEADER); $pdf->SetFooterMargin(PDF_MARGIN_FOOTER); // set auto page breaks $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); // set image scale factor $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); // set some language-dependent strings (optional) if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { require_once(dirname(__FILE__).'/lang/eng.php'); $pdf->setLanguageArray($l); } // --------------------------------------------------------- // set default font subsetting mode $pdf->setFontSubsetting(true); // Set font // dejavusans is a UTF-8 Unicode font, if you only need to // print standard ASCII chars, you can use core fonts like // helvetica or times to reduce file size. $pdf->SetFont('dejavusans', '', 14, '', true); // Add a page // This method has several options, check the source code documentation for more information. $pdf->AddPage(); // set text shadow effect $pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal')); // Set some content to print $html = '<table> <tr> <td width="50%"> <img src="http://www.talhakeskin.com.tr/wp-content/themes/talha/images/resim.jpg" class="f-logo">'; $tarih = "27-05-2017"; $html.=' </td> <td width="50%" style="text-align:right;">'. $db->VeriOkuTek("genelayarlar","Fatura","GenelID",1).' </td> </tr> <tr> <td width="50%"> <strong class="mk" style="font-size: 18px;display: block;color: #333333;"><span>Makbuz / Fatura</span><br> <span style="font-size:14px">'.$tarih.' </span></strong> </td> <td width="50%" style="text-align:right;"> Makbuz / Fatura #: 1<br> Müşteri #: 1 <br> </td> </tr> <tr> <td width="50%;" > <strong>Faturalama Adresi:</strong><br> <span>Talha Keskin<br> İstanbul Kartal<br><br> Türkiye</span> <br><br> </td> <td style="text-align:right;"> <strong>Ödeme Bilgileri</strong><br> <span>Talha Keskin<br> Kredi Kartı<br> <strong>Ücretli:</strong> 100 TL</span> </td> </tr> <tr> <td><strong> Ürünler</strong><br><br></td> </tr> '; $isim = "Örnek Ürün Kategorisi"; $altisim ="Örnek Ürün"; $urunnumarasi ="100 "; $sure = "Süresiz"; $fiyat = "100 TL"; $html.=' <tr> <td> <strong>'.$isim.'</strong><br> <span><small>'.$altisim.'</small><br><br> Ürün Numarası: '.$urunnumarasi.'<br> Miktar: 1<br> Süre: '.$sure.'</span></td> <td style="text-align:right;"><span>Liste Fiyatı: '.$fiyat.'<br>Satın Alma Fiyatı: '.$fiyat.'<br>İndirim: 0.00 TL<br>Ara Toplam: '.$fiyat.'<br>Vergi: 0.00 TL<br>Toplam: '.$fiyat.'</span><br><br></td> </tr> <tr> <td></td> <td style="text-align:right;"> <span> Ara Toplam: 100 TL<br> Ücretler: 0.00 TL<br> Vergiler: 0.00 TL<br> <strong>Toplam: 100<small>TL</small></strong> </span> </td> </tr> '; $html.=' <table> '; // Print text using writeHTMLCell() $pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); // --------------------------------------------------------- // Close and output PDF document // This method has several options, check the source code documentation for more information. $pdf->Output("e-fatura-$_GET[id].pdf", 'D'); //============================================================+ // END OF FILE //============================================================+
Kodlarını eklemeniz gerekmektedir.
Bu kısımdan sonra examples/faturaindir.php şeklinde link vererek dosyanızı çıktı olarak alabilirsiniz. Benim yazdığımda PDF dosya inmekte. Ancak siz inmesi yerine PDF olarak göstermesini veya başka bir işlem yapmasını istiyorsanız
$pdf->Output("e-fatura-$_GET[id].pdf", 'D');
Satırında yer alan D harfini eklentinin dökümanında anlatılan harflerle değiştirebilirsiniz.
İyi çalışmalar dilerim.
Some data has already been output, can’t send PDF file hatası için paylaşmış olduğun bilgi için teşekkürler.
Ben teşekkkür ederim. İyi çalışmalar