FPDF – Урок 4: Много столбцов

Итак в прошлых пример мы уже достаточно многому научились. В Уроке первом (FPDF – Урок 1: Простой пример) мы узнали о самых основах создания файла. Во втором Уроке (FPDF – Урок 2: Заголовок, подвал, разрыв страницы и изображение) научились делать подвал, заголовок и даже разместили логотип в документе. В Уроке третьем (FPDF – Урок 3: Переносы строк и работа с цветом) разобрались с переносами строк, и с тем как можно управлять цветом по всему документу.

Теперь пришло время узнать о том как же разбить текст на несколько столбцов. Урок 4, которого я сегодня сделаю вольный перевод, является немного усовершенствованным или обновленным кодом Урока 3.

require('Fpdf\fpdf.php');
 
class PDF extends FPDF
{
//Текущая колонка
var $col=0;
//Ордината начала колонки
var $y0;
 
function Header()
{
//Колонтитул страницы
global $title;
 
$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);
$this->SetLineWidth(1);
$this->Cell($w,9,$title,1,1,'C',true);
$this->Ln(10);
//Сохраняем ординату
$this->y0=$this->GetY();
}
 
function Footer()
{
//Подвал страницы
$this->SetY(-15);
$this->SetFont('Arial','I',8);
$this->SetTextColor(128);
$this->Cell(0,10,'Page '.$this->PageNo(),0,0,'C');
}
 
function SetCol($col)
{
//Устанавливаем позицию в данном столбце
$this->col=$col;
$x=10+$col*65;
$this->SetLeftMargin($x);
$this->SetX($x);
}
 
function AcceptPageBreak()
{
//Не автоматический разрыв страницы
if($this->col<2)
{
//Переходим на следующую колонку
$this->SetCol($this->col+1);
//Задать ординату к началу
$this->SetY($this->y0);
//Остаемся на странице
return false;
}
else
{
//Возвращаемся к первому столбцу
$this->SetCol(0);
//Разрыв страницы
return true;
}
}
 
function ChapterTitle($num,$label)
{
//Заголовок
$this->SetFont('Arial','',12);
$this->SetFillColor(200,220,255);
$this->Cell(0,6,"Chapter $num : $label",0,1,'L',true);
$this->Ln(4);
//Сохраняем ординату
$this->y0=$this->GetY();
}
 
function ChapterBody($file)
{
//Чтение текстового файла
$f=fopen($file,'r');
$txt=fread($f,filesize($file));
fclose($f);
//Шрифт
$this->SetFont('Times','',12);
//Вывод текст в 6 cm ширины столбца
$this->MultiCell(60,5,$txt);
$this->Ln();
//Ссылка
$this->SetFont('','I');
$this->Cell(0,5,'(end of excerpt)');
//Возвращаемся к первому столбцу
$this->SetCol(0);
}
 
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();

Ключевым методом является AcceptPageBreak (). Всякий раз, когда встречается условие разрыва страниц, вызывается этот метод и происходит или не происходит разрыв страниц в зависимости от возвращенного значения. Если данный метод не переопределить, то не будет достигнут желаемый макет документа с колонками.
Для остальных строк кода, произошло не так много изменений. Два метода были добавлены к классу, чтобы сохранять текущий номер колонки и текущее место начала колонки. Ширина колонки устанавливается методом Multicell () в значение 6 см.

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

Результат Урока 4: Много столбцов :

FPDF - Урок 4: Много столбцов

В следующем уроке будут рассмотрена работа с таблицами при создании файла PDF с помощью библиотеки FPDF – FPDF – Урок 5: Таблицы.

Ссылки:

Удачного использования!

(Visited 211 times, 1 visits today)