Quantcast
Channel: Developer Blog » print pdf
Viewing all articles
Browse latest Browse all 2

Рисуем свой pdf файл на php, часть 2

$
0
0

В первой части я расказал, с чего все началось, и что было выбрано как инструмент для решения задачи.

Итак бибилиотеке fpdf 1.5.3 , скачиваем, распаковываем к себе на сервер в любую папку, к примеру pdf, после распаковки получаем следующую структуру папок:

У себя я использую пакет denver от dklab.ru, либо XAMPP http://www.apachefriends.org/en/xampp.html, который включает полный пакет программ необходимых веб разработчику. К тому же XAMPP подойдет как тем кто любит Linux, так и Windwos разработчикам.

pdf/
-doc/
-font/
-tutorial/
-FAQ.htm
-fpdf.css
-fpdf.php
-histo.htm
-install.txt

Оставляем только необходимое папку font/ и fpdf.php. Конечно, у кого есть немного времени чтоб ознакомиться с примерами из папки tutorial/, вы не пожалеете, примеры показывают практически исчерпывающую информацию по работе с fpdf.

Для начала создамим первый простой pdf файл, создайте pdf/test.php, с кодом:

[cc lang="php"]
require(‘fpdf.php’);

$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont(‘Arial’,'B’,16);
$pdf->Cell(40,10,’Hello World!’);
$pdf->Output();
[/cc]

Первой строчкой мы подключаем библиотеку, далее:

[cc lang="php"]$pdf = new FPDF(); // Создаем новый объект[/cc]

Изначально наш pdf файл пуст, по-этому добавляем в наш pdf, новый лист:

[cc lang="php"]$pdf->AddPage(); // по умолчанию создется лист формата А4[/cc]

Перед выводом любого текста, предварительно нужно задать шрифт, в противном случае при создание будет сообщено об ошибке:
[cc lang="php"]$pdf->SetFont(‘Arial’,'B’,16);[/cc]

И вот теперь мы может напечатать свой первый текст в первом pdf файле, с помощью функции Сell(), эта функция нарисует прямоугольную область с надписью внутри. Фактически будет выведена ячейка таблицы с текстом внутри.

[cc lang="php"]Cell(40,10,’Hello World!’);[/cc]

Для вывода просто текста используюется функция Write(), а для перевода на новую строку отдельная функция Ln():

[cc lang="php"]
$pdf->Ln(); // перевод картеки на новую строку
$pdf->Write(4, “текс для вывода”); // значение 4 означение высоту строки
[/cc]

Выводим сам pdf, с помощью функции Output(), которая может принимать несколько значний, Output(“пусть/имя.pdf”, dest) имя выводимого файла, и второй необязательный параметр как будет выводиться файл, сразу в броузер либо сохранен на диск:

[cc lang="php"]$pdf->Output();[/cc]

Вот и создан первый pdf файл, на практиче простые текстовые файлы создаются довольно просто и библиотека работает безупречно.

И так вывод тикетов в pdf файл, ниже я буду давать php код с минимумом текстовых коментариев, так как основные принципы создания pdf файла я описал выше…

На входе у меня инфомация из базы данных, приведу только пример массива полученного после выборки части текста, который будет печататься на тикетах:

[cc lang="php"]
// Входящий массив – список идентификаторов отелей
$idhostel(’12′,’14′,’43′,’45′,’54′,’67′);

$pdf = new PDF(); // Создаем новый объект

$pages = ceil(count($idhostel)/27); // 27 тикетов на стрнице, считаем количество страниц

for ($p = 1; $p if (count($idhostel) > 27) $to = 27; else $to = count($idhostel);
for ($i = 0; $i

// array_shift() - удаляем из массива $idhostel обработанный id
$sql = "SELECT name, street, zip, city, country FROM fe_hostels WHERE idhostel='".array_shift($idhostel)."'";
$result = DB::getRow($sql); // getRow() из класса работы с базой, у каждого свой.
$hostel[] = $result;
}

// Информация для отладки, попробуйте с ней.
//echo "page: ".$p.""; // Текущая страница
//print_r($hostel); // Массив данных для вывода на тикеты
//echo "
“;

// Добавляем новую странцу
$pdf->AddPage();
// Рисуем прямоугольники – моя функция описание ниже
//$pdf->pageRect();
// Пишем текст на тикетах – моя функция описание ниже
$pdf->printText($hostel);
// После вывода очищаем массив с данными предыдущей страницы
unset($hostel);
}

// Рисуем pdf, параметр D – отправить в бороузер и предложить скачать.
$pdf->Output(“”, “D”);
[/cc]

Выше показан основной код, который создает новый объект класса PDF(), который в свою очередь является расширением (extends) класса FPDF нашей библиотеки, ниже приведен код моему класса, который непосредственно рисует закрашенный прямоугольники, выводит текст с переносом на следующую строки и перестройкой каждой последующей строки.

Замечу, что при выводе текста с помощью функции Write() возникает проблема переноса текста на следующую строку. Перед тем как начать вывод нужно задать координаты вывода функцией SetXY(), а следовательно и контролировать эти координа при переносах строк.

Показанный ниже код нужно вставить перед

[cc lang="php"]$pdf = new PDF();[/cc]

В коде я обрезал вывод метов класса PDF(), полный вывод каждого метода вы можете скачать одним файлом, в конце статьи.

[cc lang="php"]
include(“fpdf.php”);
class PDF extends FPDF {

// Рисуем зарашенные прямоугольники
function pageRect(){
$this->SetFillColor(153,204,255); // Задаем цвет фона
// Рисем прямоугольники 3 колонки по 27 штук
$k = 16;
for ($i = 1; $i $this->Rect(8,$k,63,29.4,’FD’);
$this->Rect(73.5,$k,63,29.4,’FD’);
$this->Rect(139,$k,63,29.4,’FD’);
$k = $k + 29.4;
}
}
// Разбиваем длиные имена отелей
function splitName($longname, $col_st, $b){
………………………… // полную версию вы можете скачать ниже
return $st;
}

// Декодируем html мнемоники
function decoder($text){
$text = utf8_decode(html_entity_decode($text, ENT_QUOTES));
return $text;
}

// Печатаем текст на тикетах
function printText ($hostel){
$a = 18; // Задаем координаты смещения для каждой строки
$b = 22;
$c = 26;
$d = 31;
$e = 36;

for ($i = 0; $i // Печатаем текст
$this->SetXY(10,$a);
$this->SetFont(‘Arial’,'U’,6);
$this->Write(4,$this->decoder(’451f.com.ua – записи разработчика’));

……………………………. // полную версию вы можете скачать ниже

$a = $a + 29.4; // Задаем приращение, высота прямоуголька 29.4 мм
$b = $b + 29.4;
$c = $c + 29.4;
$d = $d + 29.4;
$e = $e + 29.4;
}

}
}

[/cc]

Оставляйте ваши коментарии, и не забудьте подписать на RSS и e-mail рассылку.

Скачать полную версию ticket.php


Viewing all articles
Browse latest Browse all 2

Latest Images

Trending Articles





Latest Images