Web-разработка

FPDF — Урок 3: Переносы строк и работа с цветом

, , , ,
4 января 2010, 12:46

Итак за нашей спиной уже два пройденных Урока:
FPDF – Урок 1: Простой пример — мы научились создавать простые PDF файлы и выводить Hello World!
FPDF – Урок 2: Заголовок, подвал, разрыв страницы и изображение — в этом уроке мы немного углубились, узнали как формируется заголовок, подвал, как можно управлять разрыв страниц, вставили изображение, научились делать нумерацию страниц.

Я удмаю что эти два Урока должны были дать Вам основные знания по работе с библиотекой FPDF для создания PDF-файлов на PHP. Теперь с каждым Уроком Мы будем рассматривать больше методов библиотеки, научимся делать больше чем выводить просто текст. Еще повторюсь что все эти Уроки придумал не сам я а они расположены на официальном сайте библиотеки, я лишь их перевожу, что то добавляю что то изменяю.

Давайте продолжим с примера, который выводит выровненные абзацы. Этот пример также иллюстрирует как работать с цветами, при помощи данной библиотеки.

require('Fpdf\fpdf.php');
 
class PDF extends FPDF
{
function Header()
{
    global $title;
 
    //Шрифт Arial, жирный, размер 15
    $this->SetFont('Arial','B',15);
    //Вычисляем ширину названия и позицию
    $w=$this->GetStringWidth($title)+6;
    $this->SetX((210-$w)/2);
    //Цвет рамки, фон и текст
    $this->SetDrawColor(0,80,180);
    $this->SetFillColor(230,230,0);
    $this->SetTextColor(220,50,50);
    //Толщина рамки (1 mm)
    $this->SetLineWidth(1);
    //Заголовок
    $this->Cell($w,9,$title,1,1,'C',true);
    //Разрыв строки
    $this->Ln(10);
}
 
function Footer()
{
    //Позиция на 1.5 cm от нижнего края документа
    $this->SetY(-15);
    //Шрифт Arial, курсив, размер 8
    $this->SetFont('Arial','I',8);
    //Цвет текста - серый
    $this->SetTextColor(128);
    //Номер страницы
    $this->Cell(0,10,'Page '.$this->PageNo(),0,0,'C');
}
 
function ChapterTitle($num,$label)
{
    //Шрифт Arial, размер 12
    $this->SetFont('Arial','',12);
    //Цвет фона
    $this->SetFillColor(200,220,255);
    //Заголовок
    $this->Cell(0,6,"Chapter $num : $label",0,1,'L',true);
    //Разрыв строки
    $this->Ln(4);
}
 
function ChapterBody($file)
{
    //Читаем текстовый файл
    $f=fopen($file,'r');
    $txt=fread($f,filesize($file));
    fclose($f);
    //Шрифт Times, размер 12
    $this->SetFont('Times','',12);
    //Выводим выровненный текст
    $this->MultiCell(0,5,$txt);
    //Разрыв строки
    $this->Ln();
    //Выводим курсивом
    $this->SetFont('','I');
    $this->Cell(0,5,'(end of excerpt)');
}
 
function PrintChapter($num,$title,$file)
{
    $this->AddPage();
    $this->ChapterTitle($num,$title);
    $this->ChapterBody($file);
}
}
 
$pdf=new PDF();
$title='20000 Leagues Under the Seas';
$pdf->SetTitle($title);
$pdf->SetAuthor('Jules Verne');
$pdf->PrintChapter(1,'A RUNAWAY REEF','20k_c1.txt');
$pdf->PrintChapter(2,'THE PROS AND CONS','20k_c2.txt');
$pdf->Output();

Метод GetStringWidth () возвращает количество символов, обязательно должен быть выбран шрифт (принимаемые параметры — строка, в которой нужно посчитать длину строки).

С помощью метода SetDrawColor () можно задать цвет для всех операций, прорисовывающих контуры (линии, прямоугольники и границы ячеек). Можно задавать в RGB или градациях серого. Метод можно вызывать до создания первой страницы и его значение не изменяется при переходе от страницы к странице. Следующий метод SetFillColor (), по действию похож на предыдущий за одним исключением что задается цвет заливки. Ну и метод SetTextColor () также похож на два предыдущих по своему действию, только он задает цвет текста, и так же как и предыдущие остается неизменным до конца документа. После чего, с помощью метода SetLineWidth () устанавливаем толщину линии рамки 1 мм (по умолчанию 0,2), и этот метод тоже сохраняет свое значение для всех страниц. Наконец после всех манипуляций, методом Cell () мы выводим ячейку (последний параметр true означает, что фон должен быть заполнен).

Метод MultiCell () позволяет печатать текст с абзацами. Выполняется каждый раз, когда будет достигнута правая граница ячейки или с помощью символа возврата каретки (\n), ячейки располагаются друг под другом, и их может быть столько сколько надо для вывода текста. Текст выравнивается по умолчанию, но текст можно выровнять по центру или по ширине. Есть возможность заливки фона текста, создания рамки. Подробную информацию о данном методе сможете прочесть в мануале.

В коде также используется два метода, с помощью которых задаются свойства документа: название (SetTitle ()) и автора (SetAuthor ()). Эти два метода не принимают больше ничего кроме как текстовых данных. Эти данные потом будут находится в свойствах документа.

Если Вы используете программу которую я описывал раньше — Foxit Reader – как альтернатива Adobe Reader, то при открытом документе такие свойства можно посмотреть зайдя в главное меню: Файл -> Properties, или можно воспользоваться сочетанием клавиш Ctrl + D.

На этом можно закончить выполнение данного примера.

Результат Урока 3: Переносы строк и работа с цветом :

FPDF - Урок 3: Переносы строк и работа с цветом

В следующем уроке можно будет узнать как сделать несколько столбцов в PDF документе — FPDF – Урок 4: Много столбцов.

Ссылки:

Удачных Вам экспериментов с библиотекой FPDF.