pdf factuur maken met php en pdflib via website
Hoe vaak gebeurd het niet dat een klant een pdf wil maken van een factuur of een bestelling? Als je php gebruikt is dit heel simpel.
Controleren of pfdlib is geinstalleerd
Eerst kijken we of de bibliotheek die we nodig hebben voor het maken van pdf bestanden aanwezig is. Hiervoor gebruiken we de phpinfo functie.
Maak een bestandje aan en noem dat:
phpinfo.php
In dat bestandje zetten we dit:
< ?phpinfo();?>
Dit bestandje plaatsen we op de server en openen we in de web browser: http://www.domeinnaam.nl/phpinfo.php.
De phpinfo functie geeft ons een lijst met alle informatie over de php installatie en ook over de apache web server, de versie van php en alle extra bibliotheken die geinstalleerd en geconfigureerd zijn.
Wij zijn opzoek naar het onderdeel pdf, dat zou er zo uit moeten zien (versie kan verschillen):

Als we dit onderdeel tegenkomen betekend dat de pdf bibliotheek is geinstalleerd en kunnen we beginnen.
PDF bestand maken met pdflib
We gaan nu testen of we een simpel pdf bestandje kunnen maken. Hiervoor maken we een nieuw tekst bestandje in onze kladblok en noemen dat:
pdf.php
in dit bestandje plaatsen we deze code:
< ?php $mypdf = PDF_new(); PDF_open_file($mypdf, ""); PDF_begin_page($mypdf, 595, 842); PDF_set_info($mypdf, "Author", "KiWi Online"); $myfont = PDF_findfont($mypdf, "Times-Roman", "host", 0); PDF_setfont($mypdf, $myfont, 10); PDF_show_xy($mypdf, "Voorbeeld PDF gemaakt met de pdflib functie", 50, 750); PDF_show_xy($mypdf, "Een simpel voorbeeld om te testen of het werkt.", 50, 730); PDF_end_page($mypdf); PDF_close($mypdf); PDF_delete($mypdf); ?>
Een korte uitleg van de gebruikte code.
Deze 2 regels starten een nieuw pdf bestand:
$mypdf = PDF_new(); PDF_open_file($mypdf, "");
Hiermee geven we aan hoe groot onze pagina wordt. De afmetingen worden 595 breed en 842 hoog. Dit is de afmeting van een A4.:
PDF_begin_page($mypdf, 595, 842);
De afmeting van een pdf pagina wordt aangegeven in punten. Dit zijn de standaard afmetingen:
a0: 2380 x 3368; a1: 1684 x 2380; a2: 1190 x 1684; a3: 842 x 1190; a4: 595 x 842; a5: 421 x 595; a6: 297 x 421; b5: 501 x 709; letter: 612 x 792; legal: 612 x 1008; ledger: 1224 x 792; 11x17: 792 x 1224; slides: 612 x 450
Met deze opdracht kunnen we de Metadata instellen, de mogelijke waarden zijn: Author, Creator, Keywords, Subject, en Title.:
PDF_set_info($mypdf, "Author", "KiWi Online");
Met de PDF_findfont geven we aan welk lettertype we gaan gebruiken:
$myfont = PDF_findfont($mypdf, "Times-Roman", "host", 0);
De standaard lettertypen die in pdflib gebruikt worden zijn:
Courier,Courier-Bold,Courier-Oblique,Courier-BoldOblique, Helvetica,Helvetica-Bold, Helvetica-Oblique,Helvetica-BoldOblique, Times-Roman,Times-Bold,Times-Italic,Times-BoldItalic, Symbol,ZapfDingbats.
Hierna geven met het volgende aandat we een lettertype willen van 10 punten. :
PDF_setfont($mypdf, $myfont, 10);
Met de PDF_show_xy functie printen we de tekst op de opgegeven positie. Dus X=50 en Y=750 voor deze regel. Het nulpunt voor de pagina (0,0) ligt in de linker onderhoek, dus y=750 ligt boven y=730!
PDF_show_xy($mypdf, "Voorbeeld PDF gemaakt met de pdflib functie", 50, 750);
Hiermee geven we het einde van onze pdf aan:
PDF_end_page($mypdf);
Hiermee geven we het einde aan van onze pdf en verwijderen we de gegevens uit het geheugen:
PDF_close($mypdf); PDF_delete($mypdf);
Een pdflib voorbeeld van een factuur:
< ? $searchpath = "/www/path/to/your/websiteroot.com"; $p = new PDFlib(); $p->set_parameter("errorpolicy", "return"); // check return values of load_font() etc. $p->set_parameter("hypertextencoding", "winansi"); // used to prevent problems with japanese systems $p->set_parameter("SearchPath", $searchpath); // **set search path parameter in pdf if ($p->begin_document("", "") == 0) { die("Error: " . $p->get_errmsg()); } $p->set_info("Creator", "KiWi Online webdesign"); $p->set_info("Author", "KiWi Online webdesign"); $p->set_info("Title", " imageInsert "); $p->begin_page_ext(595, 842, ""); // declare page with standard A4 size $certLogo = "images/pdf.jpg"; // your image name $image = $p->load_image("auto", $certLogo, ""); if (!$image) { die("Error: " . $p->get_errmsg()); } $p->fit_image($image, 50,750,"boxsize {300 100} position 50 fitmethod meet"); //place image within page coordinates $p->close_image($image); // close resource $font = $p->load_font("Helvetica", "winansi", ""); $p->setfont($font, 9.0); $p->set_text_pos(50, 750); $p->show_xy("Straat en huisnummer",50,750); $p->show_xy("Postcode en stad",50,738); $p->show_xy("The Netherlands",50,726); $p->show_xy("info@kiwi-online.nl",50,714); $p->show_xy("www.kiwi-online.nl",50,702); $p->show_xy("Rabobank: 1111.11.111",50,690); $p->show_xy("IBAN: NL",50,678); $p->show_xy("BIC: RABONL2U",50,666); $p->show_xy("KvK: 22222222",50,654); $p->show_xy("Invoice number: ".$rowi['InvoiceID']."",300,750); $p->show_xy("To: ",300,726); $p->show_xy("".$rowuser['Companyname']."",300,714); $p->show_xy("Attn: ".$rowuser['FirstName']." ".$rowuser['LastName']."",300,702); $p->show_xy("".$rowuser['StreetAddress']."",300,690); $p->show_xy("".$rowuser['Zip_PostelCode']." ".$rowuser['City']."",300,678); $p->show_xy("TaxID: ".$rowuser['Taxid']."",300,666); $p->show_xy("Accountnr: ".$rowuser['UserID']."",300,654); $p->show_xy("Invoice date:",50,600); $p->show_xy("".$todayDate."",150,600); $p->show_xy("Due date:",50,588); $p->show_xy("".$duedate."",150,588); $p->moveto(20, 560); $p->lineto(570, 560); $p->stroke(); $p->show_xy("Aantal / Quantity ",50,549); $p->show_xy("Omschrijving / Description ",190,549); $p->show_xy("Prijs / Price ",360,549); $p->show_xy("Totaal / Total ",470,549); $p->moveto(20, 540); $p->lineto(570, 540); $p->stroke(); $p->show_xy("1 ",50,520); $p->show_xy("".$row['Package']." ",190,520); $p->show_xy("Euro ".$row['Amount']."",360,520); $p->show_xy("Euro ".$row['Amount']."",470,520); $p->moveto(20, 200); $p->lineto(570, 200); $p->stroke(); $p->show_xy("Sub Totaal / Sub Total ",50,189); $p->show_xy("Euro ".$row['Amount']."",470,189); $p->show_xy("B.T.W. / V.A.T. ",50,177); $p->show_xy("Euro ".$btw."",470,177); $p->show_xy("Totaal / Total ",50,160); $p->show_xy("Euro ".$totalprice."",470,160); $p->moveto(20, 150); $p->lineto(570, 150); $p->stroke(); $p->end_page_ext(""); $p->end_document(""); $data = $p->get_buffer(); $len = strlen($data); header("Content-type: application/pdf"); header("Content-Length: $len"); header("Content-Disposition: inline; filename=invoice.pdf"); //print $data; $file = $rowi['InvoiceID'].'.pdf'; $mypath="pdf/"; // mkdir($mypath,0777,TRUE); $filename = $mypath.$file; $handle = fopen($filename,"x+"); fwrite($handle,$data); fclose($handle); $p = 0; ?>








januari 9th, 2011 at 11:32
Geweldige uitleg, bedankt voor je voorbeeld van de pdf factuur, precies wat ik zocht