Teme: PHP

Kreiranje PDF dokumenta u PHP sa tfpdf, fpdf i fpdi

Skraćena veza: https://pedja.supurovic.net/veza/8667

Potrebno vam je da na sajtu generišete PDF dokument koji je predefinisani obrazac a posetilac sajta samo treba da ga popuni? Evo kako sam ja to uradio. Verovatno će i vama biti korisno.

Postupak se svodi na otvaranje PDF dokumenta, učitavanje strane iz njega koja sadrži već pripremljen obrazac i zatim upisivanje dodatnog sadržaja u tu stranu, na mestima koja su predviđena za popunjavanje.

Za kreiranje PDF dokumenata može se upotrebiti odlična biblioteka FPDF. Biblioteka sadrži PHP klasu koja programeru omogućava kreiranje PDF dokumenata na visokom nivou, odnosno, da se ne mora baviti strukturom i formatom PDF dokumenta, već sve obavlja pozivanjem medota ove klase – smešta sadržaje na stranu dokumenta tamo gde želi i kako želi. Biblioteka je otvorenog koda.

Jedini nedostatak ovde biblioteke je što ne podržava kodnu stranu UTF-8 a time ni kreiranje dokumenata na našem jeziku, ćirilicom i latinicom. Zbog toga je napravljena verzija bibilioteke TFPDF a koja podržava UTF-8. Meni je trebalo da kreiram dokumente na našem jeziku, pa sam upotrebio sam ovu drugu biblioteku. Samo je preuzmite i raspakujte arhivu u direktorijum tfpdf.

Nisam hteo da programski crtam ceo dokument već sam unapred pripremio obrazac u grafičkom programu i snimo ga u PDF datoteku.  Upotrebio sam biblioteku FPDI, koja je napravljena kao proširenje za FPDF i omogućava učitavanje postojećih PDF dokumenata da bi se dalje mogli menjati. Ona je takođe otvorenog koda. Preuzmite je i raspakujte iz arhive u direktorijum fpdi.

FPDI klasa je napravljena da radi sa FPDF klasom, a ja sam upotrebio TFPDF, tako da sam morao da napravim sitnu izmenu u kodu datoteke fpdi/fpdi_bridge.php. Na liniji 24 originalno stoji:

    class fpdi_bridge extends FPDF

a ja sam to promenio u

    class fpdi_bridge extends tFPDF

podesivši tako da klasa radi sa TFPDF bibliotekom.

Manje-više to je sve što je bilo potrebno da se uradi da se dobije okruženje za rad. Sada je još samo trebalo napisati kod koji učitava PFD dokument i upisuje u njega dodatne podatke. Daću ovde kratak primer.

Za početak potreban je PDF dokument, spremio sam primer obrasca uplatnice pod imenom uplatnica.pdf.

Zatim sam napisao kod koji popunjava ovaj obrazac pod imenom uplatnica.php:

<?php

// učitaj obe biblioteke
require_once ('tfpdf/tfpdf.php');
require_once ('fpdi/fpdi.php');

// instaniciraj objekat i otvori novu praznu stranu
$pdf = new FPDI();
$pdf->AddPage();

// učitaj obrazac kao šablon strane
$pagecount = $pdf->setSourceFile("uplatnica.pdf");
$tpl = $pdf->importPage(1);

// primeni šablon na praznu stranu
$mPageInfo = $pdf->useTemplate($tpl);

// podesi referentne koordinate. SVe ostale koordinate će 
// biti relativne uodnosu na ove tako da će lako biti podesiti
// prikaz tačno na obrazac
$mRootX = 8;
$mRootY = 10;

// podesi vrstu slova (DejaVu je deo biblioteke, ali 
// se može koristiti i bilo koja druga vrsta slova)
$pdf->AddFont('DejaVu','','DejaVuSansCondensed.ttf',true); 
$pdf->SetFont('DejaVu','',10); 

// podesi visinu jednog reda. Tako e kasnije biti lakše 
// upisivati tekst koji ide u više redova
$mLineHeight = 5;

// podesi koordinate prve referentne tačke
$mX1 = $mRootX; $mY1 = $mRootY; 

// namesti kursor na koordinate i upišemo podatak
$pdf->SetXY($mX1,$mY1); 
$pdf->Cell(0, 0, "Pera Perić", 0, 0, 'L'); 

$pdf->SetXY($mX1,$mY1+($mLineHeight*1)); 
$pdf->Cell(0, 0, "Perina ulica broj 4, Perićgrad", 0, 0, 'L'); 

$mY2 = $mRootY + 20; 

$pdf->SetXY($mX1,$mY2); 
$pdf->Cell(0, 0, "Pera plaća", 0, 0, 'L'); 

$pdf->SetXY($mX1,$mY2+($mLineHeight*1)); 
$pdf->Cell(0, 0, "sve što treba da se plati", 0, 0, 'L'); 

$mY3 = $mRootY + 40; 

$pdf->SetXY($mX1,$mY3); 
$pdf->Cell(0, 0, "Primalac uplate", 0, 0, 'L'); 

$pdf->SetXY($mX1,$mY3+($mLineHeight*1)); 
$pdf->Cell(0, 0, "Primalačka bb, Primigrad", 0, 0, 'L'); 

$mX4 = $mRootX + 100; 
$mY4 = $mRootY + 4.5; 

$pdf->SetXY($mX4,$mY4); 
$pdf->Cell(11, 0, "221", 0, 0, 'C'); 

$pdf->SetX($mX4+16); 
$pdf->Cell(11, 0, "RSD", 0, 0, 'C'); 

$pdf->SetX($mX4+39); 
$pdf->Cell(0, 0, "00.000,00", 0, 0, 'L'); 

$mX5 = $mRootX + 120; 
$mY5 = $mRootY + 16.7; 

$pdf->SetXY($mX5,$mY5); 
$pdf->Cell(0, 0, "000-0000000000-00", 0, 0, 'L'); 

$mX6 = $mRootX + 100; 
$mY6 = $mRootY + 28.7; 

$pdf->SetXY($mX6,$mY6); 
$pdf->Cell(11, 0, "99", 0, 0, 'C'); 

$pdf->SetX($mX6+16); 
$pdf->Cell(0, 0, "00000000", 0, 0, 'L'); 

// pošalji pripremljeni dokument veb čitaču da ga prikaže
$pdf->Output(); 

?>

Preuzmite primer (php i pdf): uplatnica.zip (27). Biblioteke preuzmite posebno sa njihovih sajtova i stavite u predviđene poddirektorijume.


Podelite ovaj članak sa prijateljima


Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Popunite izraz tako da bude tačan: *