<?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>Developer Blog &#187; fpdf</title>
	<atom:link href="http://451f.com.ua/tag/fpdf/feed" rel="self" type="application/rss+xml" />
	<link>http://451f.com.ua</link>
	<description>developer blog - 451 degrees Fahrenheit</description>
	<lastBuildDate>Sun, 04 Jul 2010 21:22:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Рисуем свой pdf файл на php, часть 2</title>
		<link>http://451f.com.ua/create-pdf-file-on-php-part2/6</link>
		<comments>http://451f.com.ua/create-pdf-file-on-php-part2/6#comments</comments>
		<pubDate>Sat, 27 Oct 2007 23:20:23 +0000</pubDate>
		<dc:creator>pilot</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[fpdf]]></category>
		<category><![CDATA[print pdf]]></category>

		<guid isPermaLink="false">http://451f.com.ua/2007/10/28/%d1%80%d0%b8%d1%81%d1%83%d0%b5%d0%bc-%d1%81%d0%b2%d0%be%d0%b9-pdf-%d1%84%d0%b0%d0%b9%d0%bb-%d0%bd%d0%b0-php-%d1%87%d0%b0%d1%81%d1%82%d1%8c-2/</guid>
		<description><![CDATA[В первой части я расказал, с чего все началось, и что было выбрано как инструмент для решения задачи. Итак бибилиотеке fpdf 1.5.3 , скачиваем, распаковываем к себе на сервер в любую папку, к примеру pdf, после распаковки получаем следующую структуру папок: У себя я использую пакет denver от dklab.ru, либо XAMPP http://www.apachefriends.org/en/xampp.html, который включает полный [...]]]></description>
			<content:encoded><![CDATA[<p>В первой части я расказал, с чего все началось, и что было выбрано как инструмент для решения задачи.</p>
<p>Итак бибилиотеке <strong>fpdf 1.5.3</strong> , скачиваем, распаковываем к себе на сервер в любую папку, к примеру <strong>pdf</strong>, после<strong> </strong>распаковки получаем следующую структуру папок:</p>
<blockquote><p>У себя я использую пакет denver от dklab.ru, либо XAMPP <a href="http://www.apachefriends.org/en/xampp.html">http://www.apachefriends.org/en/xampp.html</a>, который включает полный пакет программ необходимых веб разработчику. К тому же XAMPP подойдет как тем кто любит Linux, так и Windwos разработчикам.</p></blockquote>
<p><font color="#008000"><strong>pdf/</strong><br />
-doc/<br />
<strong>-font/</strong><br />
-tutorial/<br />
-FAQ.htm<br />
-fpdf.css<br />
<strong>-fpdf.php</strong><br />
-histo.htm<br />
-install.txt</font></p>
<p>Оставляем только необходимое папку <strong>font/</strong> и <strong>fpdf.php. </strong>Конечно, у кого есть немного времени чтоб ознакомиться с примерами из папки <strong>tutorial/, </strong>вы не пожалеете, примеры показывают практически исчерпывающую информацию по работе с fpdf.</p>
<p>Для начала создамим первый простой pdf файл, создайте pdf/test.php, с кодом:</p>
<p>[cc lang="php"]<br />
require(&#8216;fpdf.php&#8217;);</p>
<p>$pdf = new FPDF();<br />
$pdf->AddPage();<br />
$pdf->SetFont(&#8216;Arial&#8217;,'B&#8217;,16);<br />
$pdf->Cell(40,10,&#8217;Hello World!&#8217;);<br />
$pdf->Output();<br />
[/cc]</p>
<p>Первой строчкой мы подключаем библиотеку, далее:</p>
<p>[cc lang="php"]$pdf = new FPDF(); // Создаем новый объект[/cc]</p>
<p>Изначально наш pdf файл пуст, по-этому добавляем в наш pdf, новый лист:</p>
<p>[cc lang="php"]$pdf->AddPage(); // по умолчанию создется лист формата А4[/cc]</p>
<p>Перед выводом любого текста, предварительно нужно задать шрифт, в противном случае при создание будет сообщено об ошибке:<br />
[cc lang="php"]$pdf->SetFont(&#8216;Arial&#8217;,'B&#8217;,16);[/cc]</p>
<p>И вот теперь мы может напечатать свой первый текст в первом pdf файле, с помощью функции <a href="http://fpdf.org/en/doc/cell.htm">Сell()</a>, эта функция нарисует прямоугольную область с надписью внутри. Фактически будет выведена ячейка таблицы с текстом внутри.</p>
<p>[cc lang="php"]Cell(40,10,&#8217;Hello World!&#8217;);[/cc]</p>
<p>Для вывода просто текста используюется функция <a href="http://fpdf.org/en/doc/write.htm">Write()</a>, а для перевода на новую строку отдельная функция <a href="http://fpdf.org/en/doc/ln.htm">Ln()</a>:</p>
<p>[cc lang="php"]<br />
$pdf->Ln(); // перевод картеки на новую строку<br />
$pdf->Write(4, &#8220;текс для вывода&#8221;); // значение 4 означение высоту строки<br />
[/cc]</p>
<p>Выводим сам pdf, с помощью функции <a href="http://fpdf.org/en/doc/output.htm">Output()</a>, которая может принимать несколько значний, <a href="http://fpdf.org/en/doc/output.htm">Output(&#8220;пусть/имя.pdf&#8221;, dest)</a> имя выводимого файла, и второй необязательный параметр как будет выводиться файл, сразу в броузер либо сохранен на диск:</p>
<p>[cc lang="php"]$pdf->Output();[/cc]</p>
<p>Вот и создан первый pdf файл, на практиче простые текстовые файлы создаются довольно просто и библиотека работает безупречно.</p>
<p>И так вывод тикетов в pdf файл, ниже я буду давать php код с минимумом текстовых коментариев, так как основные принципы создания pdf файла я описал выше&#8230;</p>
<p><span id="more-6"></span></p>
<p>На входе у меня инфомация из базы данных, приведу только пример массива полученного после выборки части текста, который будет печататься на тикетах:</p>
<p>[cc lang="php"]<br />
// Входящий массив &#8211; список идентификаторов отелей<br />
$idhostel(&#8217;12&#8242;,&#8217;14&#8242;,&#8217;43&#8242;,&#8217;45&#8242;,&#8217;54&#8242;,&#8217;67&#8242;);</p>
<p>$pdf = new PDF();  // Создаем новый объект</p>
<p>$pages = ceil(count($idhostel)/27); // 27 тикетов на стрнице, считаем количество страниц</p>
<p>for ($p = 1; $p < ($pages+1); $p++){<br />
if (count($idhostel) > 27) $to = 27; else $to = count($idhostel);<br />
for ($i = 0; $i < $to; $i++){</p>
<p>// array_shift() - удаляем из массива $idhostel обработанный id<br />
$sql = "SELECT name, street, zip, city, country FROM fe_hostels WHERE idhostel='".array_shift($idhostel)."'";<br />
$result = DB::getRow($sql); // getRow() из класса работы с базой, у каждого свой.<br />
$hostel[] = $result;<br />
}</p>
<p>// Информация для отладки, попробуйте с ней.<br />
//echo "page: ".$p.""; // Текущая страница<br />
//print_r($hostel); // Массив данных для вывода на тикеты<br />
//echo "<br />&#8220;;</p>
<p>// Добавляем новую странцу<br />
$pdf->AddPage();<br />
// Рисуем прямоугольники &#8211; моя функция описание ниже<br />
//$pdf->pageRect();<br />
// Пишем текст на тикетах &#8211; моя функция описание ниже<br />
$pdf->printText($hostel);<br />
// После вывода очищаем массив с данными предыдущей страницы<br />
unset($hostel);<br />
}</p>
<p>// Рисуем pdf, параметр D &#8211; отправить в бороузер и предложить скачать.<br />
$pdf->Output(&#8220;&#8221;, &#8220;D&#8221;);<br />
[/cc]</p>
<p>Выше показан основной код, который создает новый объект класса PDF(), который в свою очередь является расширением (extends) класса FPDF нашей библиотеки, ниже приведен код моему класса, который непосредственно рисует закрашенный прямоугольники, выводит текст с переносом на следующую строки и перестройкой каждой последующей строки.</p>
<blockquote><p>Замечу, что при выводе текста с помощью функции <a href="http://fpdf.org/en/doc/write.htm">Write()</a> возникает проблема переноса текста на следующую строку. Перед тем как начать вывод нужно задать координаты вывода функцией <a href="http://fpdf.org/en/doc/setxy.htm">SetXY()</a>, а следовательно и контролировать эти координа при переносах строк.</p></blockquote>
<p>Показанный ниже код нужно вставить перед</p>
<p>[cc lang="php"]$pdf = new PDF();[/cc]</p>
<p>В коде я обрезал вывод метов класса PDF(), полный вывод каждого метода вы можете скачать одним файлом, в конце статьи.</p>
<p>[cc lang="php"]<br />
include(&#8220;fpdf.php&#8221;);<br />
class PDF extends FPDF {</p>
<p>// Рисуем зарашенные прямоугольники<br />
function pageRect(){<br />
$this->SetFillColor(153,204,255); // Задаем цвет фона<br />
// Рисем прямоугольники 3 колонки по 27 штук<br />
$k = 16;<br />
for ($i = 1; $i < 10; $i++){<br />
$this->Rect(8,$k,63,29.4,&#8217;FD&#8217;);<br />
$this->Rect(73.5,$k,63,29.4,&#8217;FD&#8217;);<br />
$this->Rect(139,$k,63,29.4,&#8217;FD&#8217;);<br />
$k = $k + 29.4;<br />
}<br />
}<br />
// Разбиваем длиные имена отелей<br />
function splitName($longname, $col_st, $b){<br />
&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;   // полную версию вы можете скачать ниже<br />
return $st;<br />
}</p>
<p>// Декодируем html мнемоники<br />
function decoder($text){<br />
$text = utf8_decode(html_entity_decode($text, ENT_QUOTES));<br />
return $text;<br />
}</p>
<p>// Печатаем текст на тикетах<br />
function printText ($hostel){<br />
$a = 18; // Задаем координаты смещения для каждой строки<br />
$b = 22;<br />
$c = 26;<br />
$d = 31;<br />
$e = 36;</p>
<p>for ($i = 0; $i < count($hostel); $i += 3){<br />
// Печатаем текст<br />
$this->SetXY(10,$a);<br />
$this->SetFont(&#8216;Arial&#8217;,'U&#8217;,6);<br />
$this->Write(4,$this->decoder(&#8217;451f.com.ua &#8211; записи разработчика&#8217;));</p>
<p>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.  // полную версию вы можете скачать ниже</p>
<p>$a = $a + 29.4; // Задаем приращение, высота прямоуголька 29.4 мм<br />
$b = $b + 29.4;<br />
$c = $c + 29.4;<br />
$d = $d + 29.4;<br />
$e = $e + 29.4;<br />
}</p>
<p>}<br />
}</p>
<p>[/cc]</p>
<p>Оставляйте ваши коментарии, и не забудьте подписать на <a href="http://451f.com.ua/feed/" title="RSS">RSS</a> и <a href="http://feeds.feedburner.com/451f" title="feedburner">e-mail</a> рассылку.</p>
<p>Скачать полную версию <a href="http://451f.com.ua/img/2007/10/tickets.txt" title="ticket.php">ticket.php</a></p>
]]></content:encoded>
			<wfw:commentRss>http://451f.com.ua/create-pdf-file-on-php-part2/6/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Рисуем свой pdf файл на php, часть 1</title>
		<link>http://451f.com.ua/create-pdf-file-on-php/3</link>
		<comments>http://451f.com.ua/create-pdf-file-on-php/3#comments</comments>
		<pubDate>Thu, 25 Oct 2007 19:54:05 +0000</pubDate>
		<dc:creator>pilot</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[fpdf]]></category>
		<category><![CDATA[pdflib]]></category>
		<category><![CDATA[print pdf]]></category>

		<guid isPermaLink="false">http://451f/2007/10/25/%d0%a0%d0%b8%d1%81%d1%83%d0%b5%d0%bc-%d1%81%d0%b2%d0%be%d0%b9-pdf/</guid>
		<description><![CDATA[При работе над одним проектом возникла задача вывести тикеты (tickets) на предварительно порезанной самоклеющейся бумаге. Из трех решений данной задачи: Выводить простым html &#8216; лем (и конвертировать в pdf) Нарисовать gif картинку Нарисовать pdf был выбран вариант №3 &#8211; нарисовать pdf, исходя из того, что в первом варианте вывод на печать в разных броузеров значительно [...]]]></description>
			<content:encoded><![CDATA[<p>При работе над одним проектом возникла задача вывести тикеты (tickets) на предварительно порезанной самоклеющейся бумаге.</p>
<p>Из трех решений данной задачи:</p>
<ol>
<li> Выводить простым html &#8216; лем (и конвертировать в pdf)</li>
<li> Нарисовать gif картинку</li>
<li> Нарисовать pdf</li>
</ol>
<p>был выбран вариант №3 &#8211; <strong>нарисовать pdf</strong>, исходя из того, что в <em>первом варианте</em> вывод на печать в разных броузеров значительно отличается и выводить html, который требуется сформировать под вывод на печать основных броузеров, не целесообразно. <em>Второй вариант </em>- вывод в картинку, не подходил так как во время вывода изображения теряется качество выводимого текста.</p>
<p>Выбранный в итоге вариант рисования своего <strong>pdf</strong>, как оказалось на практике не так легко воплотить.</p>
<p>Первое, что нужно выбрать, библиотеку для рисования pdf.</p>
<p>При беглом обзоре с гуглом, попались:</p>
<ol>
<li><a href="http://www.pdflib.com/products/pdflib-family/"> pdflib</a></li>
<li><a href="http://www.fpdf.org/"> fpdf153</a></li>
<li><a href="http://html2fpdf.sourceforge.net">html2fpdf-3.0.2b</a> — конвертер из html</li>
<li><a href="http://www.digitaljunkies.ca/dompdf/"> dompdf-0.5.1</a> — конвертер из html</li>
</ol>
<p>Выбор был остановлен на fpdf153, почему?</p>
<p>Самый простой вариант, который меня устраивал  — это использовать <em>конвертер из html в pdf , </em>но полученный результат конвертирования меня не устроил, так как пердставленые бесплатные конвертеры могут корректно выполнять конвертацию только простых html файлов без использования блоков div. В основном простых таблиц обозначенных бордерами.</p>
<blockquote><p>Кого заинтересовали мои исследования в области конвертации из <strong>html</strong> в <strong>pdf</strong>, пишите в комментариях. Так как во время поиска конвертера я протестировал несколько коммерческих продуктов, которые при наличии средств можно использовать вместо того, чтоб заниматься конвертацией и доделкой бесплатных библиотек самому.</p></blockquote>
<p>Рисовалка pdf файлов <strong>pdflib </strong>доступная как модуль расширения <strong>php</strong> хорошо документированная, оказалась для меня не доступной так как хостиг провайдер заказчика, отказался добавлять эту библиотеку.  В итоге для работы я выбрал библиотеку <strong>fpdf</strong> последняя доступная версия 1.5.3 , сайт разработчика <a href="http://www.fpdf.org/">www.fpdf.org</a>  Русская документация по fpdf library качаем по ссылке <a href="http://www.fpdf.org/en/dl.php?id=92">http://www.fpdf.org/en/dl.php?id=92</a></p>
<p>С библиотекой все ясно, приступаем непосредственно к самому моменту рисования pdf файла, об этом во подробно во второй части&#8230;</p>
<blockquote><p>У кого есть личный примеры работы с <strong>fpdf</strong>, пишите свои примеры, буду рад разместить ваш опыт на страницах этого дневника.</p></blockquote>
<p>Не забудьте подписаться на <a href="http://451f.com.ua/feed/" title="RSS">RSS</a> и <a href="http://feeds.feedburner.com/451f" title="feedburner">e-mail</a> рассылку.</p>
]]></content:encoded>
			<wfw:commentRss>http://451f.com.ua/create-pdf-file-on-php/3/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
