<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sezai Yılmaz'ın Bilgisayar Dünyası &#187; piechart</title>
	<atom:link href="http://www.sezaiyilmaz.com/tag/piechart/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sezaiyilmaz.com</link>
	<description>Linux, UNIX, Windows, sistem yönetimi, uygulama ve sistem programı geliştirme tecrübeleriyle ilgili yazıları...</description>
	<lastBuildDate>Mon, 30 Nov 2009 11:10:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>PHP ile PDF Yazdırmak &#8211; FPDF</title>
		<link>http://www.sezaiyilmaz.com/2009/11/30/php-ile-pdf-yazdirmak-fpdf/</link>
		<comments>http://www.sezaiyilmaz.com/2009/11/30/php-ile-pdf-yazdirmak-fpdf/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 21:51:51 +0000</pubDate>
		<dc:creator>Sezai YILMAZ</dc:creator>
				<category><![CDATA[Geliştirme]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Teknoloji]]></category>
		<category><![CDATA[fpdf]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[pdf protection]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[piechart]]></category>

		<guid isPermaLink="false">http://www.sezaiyilmaz.com/?p=462</guid>
		<description><![CDATA[Eşim Meryem&#8217;in yayıncılık işlerine teknolojik destek vermek amacıyla 2009&#8242;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ı&#8217;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 [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-464" title="fpdf" src="http://www.sezaiyilmaz.com/wp-content/uploads/2009/11/fpdf.gif" alt="fpdf" width="104" height="71" />Eşim Meryem&#8217;in yayıncılık işlerine teknolojik destek vermek amacıyla 2009&#8242;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ı&#8217;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.<span id="more-462"></span></p>
<p>Ö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: <a title="FPDF" href="http://www.fpdf.org" target="_blank">FPDF</a>.</p>
<p>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.</p>
<pre><code><span>&lt;?php
</span></code>
<pre><code><span>require(</span><span>'fpdf.php'</span><span>);
</span></code></pre>
<p><code><span>class </span>PDF <span>extends </span>FPDF<br />
{<br />
</code></p>
<pre><code><span>function </span>Header<span>()
{
    </span><span>// her yeni sayfanın üst kısmına yazılacak
 </span>   $<span>this-&gt;</span>SetFont<span>(</span><span>'Arial'</span><span>,</span><span>'B'</span><span>,</span>16<span>);
    </span>$<span>this-&gt;</span>SetTextColor<span>(</span>255<span>,</span>192<span>,</span>203<span>);
    </span>$<span>this-&gt;</span></code><code>MultiCell<span>(</span>0<span>,</span>5<span>,"sample header text"</span><span>,</span>0<span>,</span><span>'L'</span><span>);</span></code><code><span>
}
}

</span></code>
<pre><code>$pdf<span>=new </span>PDF<span>();
</span>$pdf<span>-&gt;</span>AddPage<span>();
</span>$pdf<span>-&gt;</span>SetFont<span>(</span><span>'Arial'</span><span>,</span><span>''</span><span>,</span>12<span>);
</span>$txt<span>=</span><span>"FPDF is a PHP class which allows to generate PDF files with pure PHP, that is to say "</span><span>.
    </span><span>"without using the PDFlib library. F from FPDF stands for Free: you may use it for any "</span><span>.
    </span><span>"kind of usage and modify it to suit your needs.\n\n"</span><span>;
for(</span>$i<span>=</span>0<span>;</span>$i<span>&lt;</span>25<span>;</span>$i<span>++)
    </span>$pdf<span>-&gt;</span>MultiCell<span>(</span>0<span>,</span>5<span>,</span>iconv('utf-8', 'iso-8859-9', $txt)<span>,</span>0<span>,</span><span>'J'</span><span>);
</span>$pdf<span>-&gt;</span>Output<span>();
</span></code></pre>
<p><code>?&gt;<br />
</code></pre>
</pre>
<p>Türkçe True Type fontları da FPDF&#8217;in kullanabileceği formata dönüştürerek sorunsuz Türkçe karakter yazdırmanız mümkün oluyor. Üretilen PDF&#8217;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&#8242;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&#8242;a dönüştürerek FPDF yardımı ile PDF&#8217;e yazdırdım.</p>
<p>Basit PDF yazdırma dışında ihtiyacım olan gelişmiş özellikler için ise yine <a title="www.fpdf.org" href="http://www.fpdf.org/en/script/" target="_blank">www.fpdf.org</a>&#8216;daki scriptler yardımıma koştu. Her birisinin ayrı ayrı yetenekleri olan onlarca script FPDF&#8217;in özelliklerini ve yeteneklerini genişletmektedir. Örneğin çapraz yazı yazmak için Rotation script&#8217;i kullanılabilir. Benim amacım çapraz silik yazı yazarak watermark oluşturmak olduğu için Watermark script&#8217;i işimi gördü. Bunun yanında PieChart türünde bazı grafikler çizme ihtiyacım olduğu için Sector script&#8217;ini de kullandım. Öğretmenlerin sadece çıktı alabilmeleri için PDF Security de uygulama ihtiyacım vardı. Bu nedenle Protection script&#8217;ini de projeye dahil ettim.</p>
<p>Ü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&#8217;ı 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ı.</p>
<p>FPDF&#8217;in PDF yazma performansı oldukça yüksek. 5 sayfalık bir PDF&#8217;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.</p>
<p>FPDF&#8217;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ış.</p>
<p>FPDF&#8217;i iş başında görmek ve ürettiği sonucu yakından incelemek için sınav üretme demo&#8217;sunu <a title="www.successtosbs.com" href="http://www.successtosbs.com" target="_blank">http://www.successtosbs.com</a>&#8216;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.</p>
<p>PHP&#8217;den PDF üretme ihtiyacı olanlara FPDF&#8217;i şiddetle öneririm.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sezaiyilmaz.com/2009/11/30/php-ile-pdf-yazdirmak-fpdf/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

