Introductie:
Afgelopen maanden heb ik in PHP een webapplicatie ontwikkeld voor een personeelsvereniging. Doel van de applicatie is om NAW gegevens van de leden te bewaren. Eel belangrijke functionaliteit is om de leden via e-mail of post te informeren over bijvoorbeeld personeelsuitjes.
Aangezien een aantal leden al vrij oud zijn en nog geen e-mailadres hebben ontvangen zij de informatie per post. Deze informatie zet ik om in brieven per pagina in een PDF bestand. Hiervoor gebruik ik de MPDF library om via PHP PDF bestanden te genereren.
Probleem:
De opdrachtgever gaf aan dat het ook fijn zou zijn als er voor de adressen etiketten gegenereerd konden worden. Deze moesten dan gemakkelijk op een vel etiketten gedrukt kunnen worden.
Oplossing:
Voor deze oplossing maak ik gebruik van etiketvellen van 3 per rij en 8 rijen wat uitkomt op 24 etiketten per pagina. Deze vellen hebben geen tussenruimte.
Om een vel met adresetiketten te genereren heb ik zelf een class Labels() gemaakt. Deze kan je downloaden via onderstaande knop.
Het resultaat van deze class is een HTML tabel. Deze tabel krijgt afmetingen via CSS opmaak in millimeters. Dit zijn normaal pixels maar MPDF kan overweg met millimeters.
In onderstaande code laad je de Labels() class in. Vervolgens voeg je de styling toe die nodig is voor de juiste afmetingen van de etiketten. Met de foreach loop voeg je telkens een adres toe. In dit voorbeeld ga ik ervan uit dat $adres het volledige adres. Om straat en woonplaats op de volgende regel te krijgen kan je gebruik maken van <br />.
$labels = new Labels(); $labels->addStyling(); foreach ($adressen $key => $adres) { $labels->addLabel($adres); } $labels->cleanUp(); $html = $labels->getLabels();
Door de cleanUp() functie aan te roepen zorgt Labels() ervoor dat een tabel altijd netjes afgesloten wordt. MDFP is nogal gevoelig voor half afgesloten tabellen wat kan resulteren in geen foutmelding maar wel een lege PDF.
In de functie endTable() zie je ook pagebreak staan. Dit zorgt ervoor dat na de 24ste etiket een nieuwe tabel begonnen wordt. Pagebreak zegt de tabel niets maar MPDF zal dit herkennen en een lege pagina beginnen.
Om een PDF zonder marges te genereren maak ik gebruik van onderstaande code om MPDF te initialiseren.
/** * Start PDF for labels. * * @throws \Mpdf\MpdfException */ public function labels() { $this->pdf = new \Mpdf\Mpdf(['tempDir' => '', 'mode' => 'c', 'default_font_size' => 13, 'default_font' => 'times', 'margin_left' => 0, 'margin_right' => 0, 'margin_top' => 0, 'margin_bottom' => 0, 'margin_header' => 0, 'margin_footer' => 0]); $this->pdf->SetDisplayMode('fullpage'); }