PHP

Kurz PHP (24.)

┌vodem  |  Kurz PHP |  Odkazy  |  Aplikace  |  Otßzky a odpov∞di

 

Generovßnφ PDF pomocφ PHP (2.)

V dneÜnφm dφle budeme pokraΦovat v generovßnφ PDF dokument∙ pomocφ knihovny FPDF o nφ₧ jsme si °ekli ji₧ v ·vodu minulΘho dφlu. Dnes si povφme jak pracovat s barvami, vytvo°it vlastnφ font a jak vytvß°et tabulky.

Ke zm∞n∞ barvy textu slou₧φ metoda SetTextColor:

SetTextColor(int red [, int green [, int blue]])

Jako parametry dosazujeme Φφslo od 0 do 255 vyjad°ujφcφ slo₧enφ danΘ barvy.

P°φklad:


<?
define('FPDF_FONTPATH','./font/');
require('./fpdf.php');

// Na strßnku vepφÜeme barevn² text.
$pdf=new FPDF();
$pdf->Open();
$pdf->AddPage();
$pdf->SetFont('Arial', 'B', 16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>

Mezi dalÜφ metody urΦenΘ k v²plni slou₧φ SetFillColor:

SetFillColor(int red [, int green [, int blue]])

Definuje barvu, kterß bude vyu₧φvßna pro operace s v²pln∞mi.

P°φklad:


<?
define('FPDF_FONTPATH','./font/');
require('./fpdf.php');

// Na strßnku vepφÜeme barevnou bu≥ku.
$pdf=new FPDF();
$pdf->Open();
$pdf->AddPage();
$pdf->SetFont('arial', '', 16);
$pdf->SetFillColor(255, 250, 0);
$pdf->Cell(40, 6, "Testovacφ text", 'LR', 0, 'L', 1);
$pdf->Output();
?>

SetDrawColor(int red [, int green [, int blue]])

Definuje barvu, kterß bude vyu₧φvßna pro vÜechny kreslφcφ operace (ohraniΦenφ, linky apod.).

P°φklad:


<?
define('FPDF_FONTPATH','./font/');
require('./fpdf.php');

// Na strßnku vepφÜeme ohraniΦenou barevnou bu≥ku.
$pdf=new FPDF();
$pdf->Open();
$pdf->AddPage();
$pdf->SetFont('arial', '', 16);
$pdf->SetFillColor(255, 250, 0);
$pdf->SetDrawColor(255, 0, 0);
$pdf->Cell(40, 6, "Testovacφ text", 'LR', 0, 'L', 1);
$pdf->Output();
?>

Text a vytvo°enφ novΘho fontu

Ke vklßdßnφ cel²ch odstavc∙ text∙ m∙₧eme vyu₧φt metodu MultiCell, pomocφ kterΘ m∙₧eme vlo₧it na strßnku text, kter² bude automaticky zarovnßn.

MultiCell(float Üφ°ka, float v²Üka, string text [, mixed ohraniΦenφ [, string zarovnßnφ [, int vypl≥]]])

  • Üφ°ka - Üφ°ka textovΘho objektu.
  • v²Üka - v²Üka textovΘho objektu.
  • text - text, kter² bude vepsßn do tohoto textovΘho objektu.
  • ohraniΦenφ - umo₧≥uje nastavit ohraniΦenφ. Dosadit m∙₧eme:
    • 0 - ₧ßdnΘ ohraniΦenφ
    • 1 - ohraniΦenφ rßmem.
  • zarovnßnφ - umo₧≥uje vycentrovßnφ nebo zarovnßnφ textu. Dosadit m∙₧eme:
    • L - zarovnßnφ vlevo (v²chozφ hodnota).
    • C - umφst∞nφ na st°ed.
    • R - zarovnßnφ vpravo.
  • v²pl≥ - urΦuje, zda mß pou₧φt (hodnota 1) nebo nemß pou₧φt (hodnota 0) barvu pozadφ.

P°φklad:


<?
define('FPDF_FONTPATH','./font/');
require('./fpdf.php');

// Na strßnku vepφÜeme barevn² text.
$pdf=new FPDF();
$pdf->Open();
$pdf->AddFont('arial','','arial.php');
$pdf->AddPage();
$pdf->SetFont('arial', '', 16);

$text = "Zßle₧φ na urΦovßnφ velikosti datovΘho typu? Velikost pole by m∞la b²t v₧dy
zvolena podle pot°eby. ZbyteΦnß velikost navφc bude takΘ zabφrat vφce mφsta."; $pdf->MultiCell(0, 5, $text); $pdf->Output(); ?>

Pokud se pokusφme podφvat na tento PDF dokument, tak zjistφme, ₧e se Üpatn∞ zobrazujφ ΦeskΘ znaky. My si nynφ ukß₧eme postup, jak si vytvo°φme nov² font pro PDF knihovnu, pomocφ kterΘho m∙₧eme vytvß°et i ΦeskΘ znaky.

Pomocφ utility ttf2pt1 m∙₧eme konvertovat TTF na Type1. Tuto utilitu si m∙₧ete stßhnout takΘ zde.

Nynφ si nejprve pomocφ nßsledujφcφho p°φkazu vytvo°φme pot°ebnΘ definiΦnφ soubory:

ttf2pt1 -b -L cp1250.map arial.ttf arial
  • cp1250.map - soubor obsahujφcφ mapu znak∙ k≤dovßnφ Windows-1250.
  • arial.ttf - zvolen² TTF soubor.
  • arial - v²sledn² Type1 font.

Poslednφ fßzφ je vytvo°enφ v²sledn²ch soubor∙, kterΘ vy₧aduje PDF knihovna. K tomu slou₧φ soubor makefont.php, kter² se nachßzφ v adresß°i "font/makefont/". Nßsledujφcφ skript nßm vytvo°φ pot°ebnΘ soubory arial.php a arial.z. Tyto soubory nßsledn∞ umφstφme do slo₧ky "font".


<?
require("./font/makefont/makefont.php");
MakeFont("arial.pfb", "arial.afm" , "cp1250");
?>

Nov² font p°idßme pomocφ metody AddFont:


$pdf->AddFont('arial','','arial.php');

Pokud se Vßm nechce "zdr₧ovat" s dan²mi postupy, m∙₧ete si tyto soubory stßhnout zde.


Tabulky

Vytvß°enφ tabulek pat°φ mezi ty jednoduÜÜφ ·koly. Cel² princip se sklßdß z vytvo°enφ bun∞k pomocφ funkce Cell a nßslednΘho zarovnßnφ na nov² °ßdek pomocφ funkce Ln. Ukßzkov² skript by mohl vypadat nßsledovn∞:


<?
define('FPDF_FONTPATH','./font/');
require('./fpdf.php');

// Na strßnku vepφÜeme ohraniΦenou barevnou bu≥ku.
$pdf=new FPDF();
$pdf->Open();
$pdf->AddFont('arial','','arial.php');
$pdf->AddPage();
$pdf->SetFont('arial', 'B', 16);
$pdf->SetFillColor(255, 250, 0);
$pdf->SetDrawColor(255, 0, 0);

// HlaviΦka tabulky
$pdf->Cell(40, 6, "JmΘno", 'LTRB', 0, 'L', 1);
$pdf->Cell(40, 6, "Funkce", 'LTRB', 0, 'L', 1);

$pdf->SetFont('arial', '', 14);

// Data tabulky
$pdf->Ln();
$pdf->Cell(40, 6, "Josef Novßk", 'LTRB', 0, 'L', 1);
$pdf->Cell(40, 6, "Manager", 'LTRB', 0, 'L', 1);

$pdf->Output();
?>

Pro tento dφl to bude vÜe. V p°φÜtφm dφle budeme dßle pokraΦovat v poznßvßnφ jazyka PHP.

 

Petr Rympler