Creare PDF cu PHP

Part. 2


Pe langa date de tip text sau imagini, cu PHP puteti crea si documente in format PDF (care pot fi citite cu Adobe Acrobat Reader), utile in special cand se doreste scoaterea la imprimanta a paginilor.
Pentru crearea documentelor de tip PDF pot fi utilizate functii care folosesc libraria PDFlib. Pentru a folosi functiile specifice acestei librarii trebuie sa aveti PDFlib instalat si activat in modulul PHP. Incepand cu versiunea PHP 5 si PDFlib 6 functiile acesteia sunt apelate ca metodele unei clase. Pe langa faptul ca unele sisteme nu au instalata sau activata aceasta librarie de functii, trebuie sa tineti cont la scrierea programului si de versiunile PHP si PDFlib pe care le folositi, acest lucru poate fi mai dificil pentru incepatori. Totusi, daca sunteti interesati gasiti documentatia pentru crearea documentelor PDF cu PDFlib la pagina creare PDF cu PHP si PDFlib.

O alta modalitate mai simpla de a crea documente PDF cu PHP este folosirea unei clase numite FDPF. Avantajul este ca aceasta clasa nu necesita instalarea PDFlib si este gratuita. Aveti nevoie doar de fisierul PHP care contine clasa FPDF si un director cu fonturile pe care le puteti folosi in documentul PDF, acestea le puteti descarca de aici Download Clasa FPDF sau de pe site-ul oficial www.fpdf.org.
Documentatia si tutorialele in limba engleza le puteti descarca si de aici -> Documentatie Clasa FPDF.

Aceasta lectie are doua parti, in prima parte, aici, voi explica lucrile de baza (pentru incepatori) in crearea documente PDF folosind class FPDF, iar in partea a doua sunt prezentate cateva metode mai avansate.

1. Primul document PDF

Primul pas e sa copiati pe server fisierul PHP cu clasa FPDF si directorul cu fonturile, apoi in fisierul dv. php includeti aceasta clasa dupa care urmeaza datele necesare creari documentului PDF.
Aceste date trebuie sa fie in principal urmatoarele:

Pentru ca documentul PDF creat sa poata fi vizualizat de browser sau descarcat, browser-ul clientului trebuie sa aibe instalat plug-in-ul pentru Adobe Reader.
Cand continutul pe care doriti sa-l afisati in pagina PDF depsaseste inaltimea acesteia, se va genera automat o pagina noua.
Iata un exemplu simplu in care este creata o pagina PDF si in ea un text.
<?php
include('fpdf.php');
$pdf=new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','',16);
$pdf->Text(25,40,'Prima pagina PDF.');
$pdf->Output();
?>
- Dupa includerea fisierului cu clasa FPDF 'fpdf.php' am definit obiectul FPDF() stocat in variabila "$pdf", cu aceasta se va apela metodele clasei.
- Odata obiectul creat, am initializat crearea paginii cu "$pdf->AddPage()", apoi am setat fontul apeland metoda specifica "$pdf->SetFont('Arial','B',16)" - primul argument este numele fontului, al doilea este pentru stil (B-bold, I-italic, U-underline, null-normal).
- In continuare am apelat metoda Text() pentru crearea textului, aceasta preia 3 argumente: primul argument reprezinta distanta X fata de marginea din stanga (aici 25), al doilea argument reprezinta distanta Y fata de marginea de sus (aici 40) si ultimul este textul care va apare in pagina PDF.
- Dupa ce am definit toate aceste elemente, apelam metoda Output(), fara atribute, care trimite datele de iesire pentru afisarea documentului PDF.
- Daca doriti salvarea acestuia pe server, apelati aceasta metoda astfel   $pdf->Output('fisier.pdf', 'F');   (in acest caz, PHP trebuie sa aibe permisiuni de creare fisiere pe server). Daca doriti ca utilizatorului sa-i apara optiunea de download, apelati aceasta metoda asa:   $pdf->Output('fisier.pdf', 'D');   (fisierul nu va fi salvat si pe server).
- Puteti vedea rezultatele acestui exemplu aici -> Demo 1.

In documentatia FPDF gasiti metodele pe care aceasta clasa le poate folosi, rolul lor si argumentele pe care le preia fiecare.

2. Adaugarea unei celule cu text

Pe langa text simplu, puteti adauga si celule (cadre) in care sa fie adaugat textul. Aceste celule le puteti crea cu metoda Cell(); sunt similare cu DIV-ul din HTML, le putem defini suprafata, fondul, bordura sau alinierea datelor.
Iata un exemplu care va crea o pagina PDF in care avem o celula cu un text centrat in ea.

<?php
include('fpdf.php');
$pdf=new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','',16);
$pdf->Cell(36,10,'Text in celula.',1,1,'C');
$pdf->Output();
?>
- Ca si in primul exemplu, dupa ce am inclus fisierul cu clasa FPDF am definit obiectul de lucru si am setat initializarea paginii si fontul.
- Functia cell() defineste cadrul celulei si textul din ea, aceasta preia mai multe argumente: - La urma am apelat metoda Output() care trimite datele de iesire pentru afisare.
Rezultatul acestui exemplu il puteti vedea aici -> Demo 2.

3. Linie noua, culori si fond

In urmatorul exemplu puteti vedea cum sa adaugati o linie noua in pagina, sa setati o culoare pentru text si pt. fondul unei celule si sa definiti culoarea si grosimea bordurii celulei.
Pentru a adauga o linie noua intr-o pagina PDF construita cu clasa FPDF se apeleaza metoda Ln(), aceasta poate prelua un argument numeric ce reprezinta inaltimea noii linii.
Pentru definirea unei culori pentru text se foloseste metoda SetTextColor(), aceasta preia 3 argumente numerice cu valoarea intre 0 si 255 reprezentand culorile RGB (Red, Green, Blue). Similar, pentru culoarea de fundal (background) se foloseste metoda SetFillColor() cu cele 3 argumente reprezentand culorile RGB, iar pentru culoarea bordurii se foloseste metoda SetDrawColor().
Grosimea liniei se poate defini cu metoda SetLineWidth(nr), unde "nr" e un numar ce reprezinta grosimea in unitatea de masura data, de obicei milimetri. Daca aceasta metoda nu e specificata, grosimea liniei este 0.2 mm.
Iata un exemplu care va crea o pagina PDF cu 2 linii de text (a doua cu text albastru) si o alta linie in care avem o celula cu fond galben, bordura definita si text verde.

<?php
include('fpdf.php');             // Include clasa FPDF

// Creaza documentul de lucru
$pdf=new FPDF();

$pdf->AddPage();                                 // Initializeaza pagina
$pdf->SetFont('Arial','',16);
$pdf->Text(20,10,"Prima linie");             // Adauga prima linie de text
$pdf->SetTextColor(1,1,250);               // Seteaza culoarea pentru textul care va apare in continuare
$pdf->Text(20,16,"Alta linie de text");         // Adauga o alta linie cu text albastru
$pdf->ln(10);                                     // Adauga rand nou cu inaltimea 10 mm
$pdf->SetDrawColor(0,10,220);                 // Seteaza o culoare pt. bordura celulei
$pdf->SetLineWidth(0.5);                     // Defineste grosimea bordurii la jumatate de milimetru
$pdf->SetFillColor(255,255,10);                     //Seteaza culoarea pt. background din celula urmatoare
$pdf->SetTextColor(0,220,0);                     // Schimba culoarea pentru urmatorul text
$pdf->Cell(115,10,'A treia linie de text in celula, dupa linie noua',1,1,'C',true);         // Celula cu background

$pdf->Output();                       // Trimite datele de iesire la browser
?>
- Ca sa intelegeti rolul fiecarei linii de cod, cititi comentariile asociate.
Pentru a vedea rezultatul acestui script click aici -> Demo 3.
- Ca sa observati mai bine rolul liniei noi "Ln()", cand testati scriptul, stergeti aceasta linie de cod.

4. Paragraf, Linie, Imagine si Link

• Paragraf
In exemplele de sus ati vazut cum puteti adauga text (pe o linie) folosind metoda "Text()", totusi, aceasta metoda este utila in cazul sirurilor mai mici, pe o singura linie, dar sunt situatii cand trebuie sa adaugati in pagina PDF un continut de text mai mare si care are mai multe linii. In acest caz folositi metoda write(), aceasta permite adaugarea de continut text cu mai multe linii (formate cu "\n") sau cand testul ajunge la marginea din dreapta trece automat pe o noua linie. Sintaxa generala a acestei metode este:
                Write(h, continut_text, url)
- unde "h" este inalimea fiecarei linii din paragraf, "continut_text" este textul adaugat, iar "url" (optional) este o adresa URL care poate fi deschisa cand se da click pe continut_text.

      • Linie
Clasa FPDF are si o metoda pe care o puteti folosi pentru trasarea de linii in pagina, aceasta este metoda line() si are urmatoarea sintaxa:
                    Line(x1, y1, x2, y2)
- unde "x1" si "y1" sunt coordonatele X si Y pentru punctul de inceput a liniei, iar "x2" si "y2" sunt coordonatele X si Y pentru punctul de sfarsit a liniei

      • Imagine
Pe langa date de tip text sau linii, in pagiina PDF puteti adauga cu FPDF si imagini JPEG, PNG sau GIF; pentru aceasta se foloseste metoda Image() care are urmatoarea sintaxa:
                Image(src, x, y, w, h, tip, url)
- unde "src" este adresa imaginii, aceasta este singura strict necesara, restul sunt optionale.
- "x" si "y" sunt coordonatele X si Y pentru coltul din stanga-sus de unde incepe afisarea imaginii, daca nu sunt specificate se folosesc coordonatele curente.
- "w" si "h" reprezinta dimensiunile (lungime, inaltime) in care va fi afisata imaginea in pagina, daca nu sunt specificate se folosesc dimensiunile imaginii.
- "tip" este tipul imaginii (JPG, JPEG, PNG sau GIF), daca nu e adaugat se preia din extensia acesteia, iar "url" este o adresa URL care poate fi deschisa la click pe imaginea respectiva.

      • Link
Sunt mai multe metode, simple sau mai complexe, de a adauga un link in pagina PDF. Aici veti vedea doua metode simple, pentru ceva mai complicat studiati tutorialul din documentatia FPDF.
Cea mai simpla metoda e sa scrieti direct adresa URL in continutul textului (vedeti in exemplul de jos), in pagina va apare adresa asa cum ati scris-o iar cand se da click pe ea deschide acea adresa.
O alta metoda pe care o puteti folosi e sa adaugati adresa in atributul URL a uneia din metodele: Cell(), Write() sau Image().

Codul din urmatorul exemplu va afisa o pagina PDF in care este un continut text pe mai multe linii care are si o adresa URL, urmat de un link intr-o celula, doua linii si o imagine.

<?php
include('fpdf.php');                         // Include clasa FPDF

// Creaza documentul de lucru
$pdf=new FPDF();

// Initializeaza pagina si defineste fontul textului
$pdf->AddPage();
$pdf->SetFont('Arial','',15);

// Sirul ce contine textul cu mai multe linii, care va fi adaugat in metoda Write()
$sir ="Text adaugat cu metoda Write() \r\n Linie noua din cadrul aceluiasi sir, \r\n O alta linie care contine si un link www.marplo.net/php-mysql";

$pdf->Write(5, $sir);                         // Paragraf cu inaltimea liniei de 5 mm
$pdf->SetTextColor(1,1,250);           // Seteaza culoarea pentru textul care va apare in continuare
$pdf->Ln(10);                                 // Linie noua cu inaltimea 20mm
$pdf->SetFont('Arial','I',13);                   // Modifica stilul si dimensunea textului, pt. evidentiere link
$pdf->Cell(23,5,'Link Jocuri','B',1,'C',false,'http://www.marplo.net/jocuri');         // Celula cu link si bordura jos pt. evidentierea acestuia

$pdf->Ln();                                   // Linie noua
$pdf->Image('marplo.jpg');         // Adauga o imagine in pagina

// Adaugarea liniilor
$pdf->SetDrawColor(90,100,200);                 // Seteaza culoarea pt. linie
$pdf->SetLineWidth(1);                       // Defineste grosimea liniei
$pdf->line(80,70,100,45);                   // Deseneaza prima linie
$pdf->line(100,45,120,70);                 // Deseneaza a doua linie

$pdf->Output();                         // Trimite datele de iesire la browser
?>
- Studiati codul si comentariile din script ca sa intelegeti modul de lucru.
Pentru a vedea rezultatul acestui script click aici -> Demo 4.

Atentie, cand doriti sa adaugati in metode atribute care, in ordine, sunt dupa altele optionale pe care nu doriti sa le folositi, trebuie totusi sa le adaugati si pe acestea (cu valoare nula "" sau false).
De exempu, in scriptul de mai sus am vrut sa adaug o adresa URL in metoda "Cell()", care este ultimul atribut, inaintea acestuia fiind atributul pt. background. Desi nu am folosit o culoare pt. background, am adaugat acest atribut ca "false" ca sa fie respectata ordinea atributelor recunoscute de clasa.


In partea a doua a acestei lectii veti invata cum sa adaugati elemente mai avansate in documentul PDF, cum sunt: Header, nr. pagini, tabele sau contint realizat prin recunoasterea unor tag-uri HTML.
Part. 2

Functii utile pentru lucrul ... <<-- Anterior --- Urmator -->> Conectare si utilizare FTP ...

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag e folosit pentru a adauga liste cu definitii in element <dl>?
<dt> <dd> <li>
<dl>
 <dt>HTML</dt>
  <dd> - Hyper Text Markup Language</dd>
  <dd> - Limbaj de cod pentru pagini web</dd>
</dl>
Care proprietate CSS poate sa ascunda un element in pagina, lasand spatiu gol in locul lui?
display position visibility
#id {
  visibility: hidden;
}
Indicati evenimentul declansat cand se apasa clic pe un obiect in pagina.
onclick onmouseover onfocus
document.getElementById("id").onclick = function(){
  alert("http://www.MarPlo.net/");
}
Indicati variabila PHP ce contine datele din $_GET, $_POST si $_COOKIE.
$_SESSION $_GET $_REQUEST
if(isset($_REQUEST["id"])) {
  echo $_REQUEST["id"];
}
Care din urmatoarele cuvinte reprezinta un Verb?
lighting believe path
I believe in my path.
- Eu cred in calea mea.
Care din urmatoarele cuvinte reprezinta un Verb?
creer camino iluminaciĆ³n
creer = a crede; camino = cale /drum; iluminaciĆ³n = iluminare
Creare documente PDF cu PHP si FPDF - Tutoriale PHP