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

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

, , , ,
10 января 2010, 18:05

Итак в прошлых пример мы уже достаточно многому научились. В Уроке первом (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: Таблицы.

Ссылки:

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