PHP

Kurz PHP (23.)

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

 

Generovßnφ PDF pomocφ PHP

V dneÜnφm dφle si povφme o generovanφ PDF dokument∙ pomocφ PHP. Pomocφ PDF m∙₧eme generovat jak jednoduchΘ dokumenty, tak slo₧itΘ dokumenty jako nap°φklad cenφky, faktury apod. Ty m∙₧eme nßsledn∞ zasφlat naÜim u₧ivatel∙m, spoleΦnφk∙m i zßkaznφk∙m. Existuje mnoho zp∙sob∙, jak generovat PDF dokumenty. My si v dneÜnφm dφle ukß₧eme, jak generovat tyto dokumenty pomocφ knihovny FPDF, kterß je k dispozici narozdφl od jin²ch zdarma.

Instalaci provedeme rozbalenφm zip archivu (naleznete jej v sekci download) do urΦitΘho adresß°e. V adresß°i font nalezneme n∞kolik ji₧ p°ipraven²ch font∙, kterΘ m∙₧eme vyu₧φvat v PDF dokumentech. Pokud by nßm tyto fonty nevyhovovaly, m∙₧eme vyu₧φt dalÜφ TTF fonty.

My nynφ zaΦneme jednoduch²m p°φkladem, ve kterΘm si vysv∞tlφme jednotlivΘ postupy p°i prßci s touto PDF knihovnou.


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

$pdf=new FPDF();
$pdf->Open();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>

Jako prvnφ si musφme nadefinovat konstantu FPDF_FONTPATH, kterß slou₧φ k ulo₧enφ cesty k ji₧ zmφn∞n²m font∙m. Po vlo₧enφ souboru obsahujφcφho PDF t°φdu m∙₧eme vytvo°it jejφ instanci. K tomu slou₧φ nßsledujφcφ konstruktor:

FPDF([string orientace [, string jednotka [, mixed formßt]]])

  • orientace - umo₧≥uje nastavit orientaci strßnky. Mezi hodnoty, kterΘ m∙₧eme dosadit pat°φ:
    • P - klasickΘ uspo°ßdßnφ na v²Üku.
    • P - uspo°ßdßnφ na Üφ°ku.
  • jednotka - jednß se o jednotku mφry v dokumentu. Dosadit m∙₧eme:
    • pt - bod
    • mm - milimetr
    • cm - centimetr
    • in - palec
  • formßt - formßt strßnky. Dosadit op∞t m∙₧eme hodnoty:
    • A3
    • A4
    • A5
    • Letter
    • Legal

P°φklad:


// Vytvo°φme nov² A4 dokument postaven² na v²Üku s jednotkou milimetr.
$pdf=new FPDF('P', 'mm', 'A4');

Nynφ ji₧ m∙₧eme p°idßvat jednotlivΘ strßnky. K tomuto ·konu slou₧φ metoda AddPage, kterß mß jeden nepovinn² parametr - orientaci strßnky. Dosadit op∞t m∙₧eme hodnoty "P" nebo "L". V²chozφ hodnotou je ta, kterß je nastavena v konstruktoru t°φdy.

P°φklad:


// P°idßme do PDF dokumentu novou strßnku.
$pdf->AddPage();

Okraje danΘ strßnky m∙₧eme nastavit pomocφ metody SetMargins:

SetMargins(float lev², float hornφ [, float prav²])

Jako v²chozφ hodnota je 1 cm.

P°φklad:


// Nastavφme okraje strßnky.
$pdf->SetMargins(2, 3, 2);

P°edtφm, ne₧ budeme n∞co zapisovat do dokumentu, musφme nastavit font, kter² budeme pou₧φvat.

SetFont(string font [, string styl [, float velikost]])

  • font - jednß se o druh fontu. Dosadit m∙₧eme ty fonty, kterΘ mßme k dispozici v nadefinovanΘm adresß°i s fonty. Mezi ty nejhlavn∞jÜφ pat°φ nap°φklad:
    • Courier
    • Arial nebo Helvetica
    • Times
  • styl - umo₧≥uje nastavit styl pφsma. M∙₧eme dosadit:
    • B - tuΦnΘ pφsmo.
    • U - podtr₧enΘ pφsmo.
    • I - kurzφva.
    • R∙znΘ dalÜφ kombinace ("BUI", apod.).
  • velikost - nastavuje velikost zvolenΘho pφsma.

P°φklad:


// Nastavφme font na Arial, velikost 16, tuΦn² a kurzφva.
$pdf->SetFont("Arial", "BI", 16);

Jakmile budeme mφt nastaven druh fontu, musφme vytvo°it oblast, do kterΘ vepφÜeme nßÜ text pomocφ metody Cell:

Cell(float Üφrka [, float v²Üka [, string text [, mixed ohraniΦenφ [, int ln [, string zarovnßnφ [, int v²pl≥ [, mixed link]]]]]]])

  • Üφ°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.
  • ln - urΦuje, kde bude pozice pro dalÜφ vklßdßnφ objektu:
    • 0 - umφst∞nφ vpravo.
    • 1 - umφst∞nφ na zaΦßtek dalÜφ °ßdky.
    • 2 - umφst∞nφ pod tento objekt.
  • 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φ.
  • link - p°edstavuje URL nebo identifikßtor vrßcen² metodou AddLink (o nφ si povφme pozd∞ji).

P°φklad:


// Vytvo°φme textovΘ pole se zadan²mi parametry.
$pdf->Cell(20,10,'Testovacφ text',1,1,'C'); 

Nynφ, kdy₧ mßme vytvo°enou "zßkladnφ" strukturu naÜeho PDF dokumentu, m∙₧eme jej zpracovat a zobrazit v²sledek. V²sledkem m∙₧e b²t text, soubor vytvo°en² na disku nebo soubor odeslan² ke sta₧enφ prohlφ₧eΦi. K tomuto vÜemu slou₧φ metoda:

Output([string jmΘno [, string cφl]])

  • jmΘno - jmΘno souboru, kter² bude vytvo°en.
  • cφl - oznaΦuje cφl, kam bude soubor odeslßn:
    • I - odeslßnφ p°φmo do prohlφ₧eΦe. Objevφ se dialog "Ulo₧it jako...".
    • D - odeslßnφ p°φmo do prohlφ₧eΦe k otev°enφ pod zvolen²m nßzvem.
    • F - ulo₧enφ do aktußlnφho adresß°e (adresß° musφ mφt prßva zßpisu).
    • S - vrßtφ dokument jako text.

P°φklad:


// OdeÜleme soubor prohlφ₧eΦi k otev°enφ.
$pdf->Output("MojePDF.pdf", "D"); 

Mezi dalÜφ mo₧nosti pat°φ takΘ vytvo°enφ zßhlavφ, zßpatφ a vklßdßnφ obrßzk∙. Zßhlavφ a zßpatφ m∙₧eme vytvo°it tak, ₧e si vytvo°φme novou t°φdu, kterß zd∞dφ metody a prom∞nnΘ t°φdy FPDF. Tuto novou t°φdu doplnφme o metody Header a Footer.


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

// Vytvo°φme naÜi novou t°φdu
class PDF extends FPDF
{
	function Header()
	{
	    // Obsah zßhlavφ
	}
	function Footer()
	{
	    // Obsah zßpatφ
	}
}

// Instance naÜφ novΘ t°φdy
$pdf=new PDF();
$pdf->AddPage();
.....
$pdf->Output();
?>

Pro vklßdßnφ obrßzk∙ slou₧φ metoda Image:

Image(string soubor, float x, float y [, float w [, float h [, string typ [, mixed link]]]])

  • soubor - urΦuje jmΘno (cestu) k souboru, kter² chceme vlo₧it do dokumentu.
  • x - x-ovß sou°adnice levΘho hornφho rohu.
  • y - y-ovß sou°adnice levΘho hornφho rohu.
  • w - Üφ°ka obrßzku (nemusφ b²t zadßna, je automaticky vypoΦtena).
  • h - v²Üka obrßzku (nemusφ b²t zadßna, je automaticky vypoΦtena).
  • typ - typ obrßzku (JPG, JPEG, atd.). Je automaticky zjiÜt∞n pomocφ koncovky souboru.
  • link - p°edstavuje URL nebo identifikßtor vrßcen² metodou AddLink (o nφ si povφme pozd∞ji).

P°φklad:


// OdeÜleme soubor prohlφ₧eΦi k otev°enφ.
$pdf->Image("logo.jpg", 10, 10); 

Pro tento dφl to bude vÜe. V p°φÜtφm dφle budeme dßle pokraΦovat v pokroΦilΘm generovßnφ PDF dokument∙.

 

Petr Rympler