SetaPDF Demos

Fill One Template Several Times

This demo shows you how to iterate over a bunch of data and fill a PDF form template several times. The template is a name badge including fields with a barcode font.

The output is demoed through data URLs. A common workflow could be to concatenate the resulting PDFs to a single PDF file which is possible with the SetaPDF-Merger component.

PHP
<?php

// load and register the autoload function
require_once __DIR__ . '/../../../../../bootstrap.php';

// let's create some example data
$firstNames = ['Peter', 'Carl', 'Dan', 'Stan', 'Roger', 'Martin', 'Paul', 'Rick', 'Chris', 'Burton'];
$lastNames = ['Walker', 'Bent', 'Stuckle', 'Willow', 'Williams', 'Müller', 'Meyer', 'Schulze', 'Cell'];
$companyNames = ['tektown Ltd.', 'camtown Ltd.', 'lenstown Ltd.', 'etown Ltd.'];

$participants = [];
for ($i = 0; $i < 30; $i++) {
    $participants[] = [
        'id' => mt_rand(100000000, 999999999),
        'Name' => $firstNames[array_rand($firstNames)] . ' ' . $lastNames[array_rand($lastNames)],
        'Company Name' => $companyNames[array_rand($companyNames)]
    ];
}

// not iterate through the data and create PDFs
foreach ($participants as $participant) {

    $writer = new SetaPDF_Core_Writer_String();
    $document = SetaPDF_Core_Document::loadByFilename(
        $assetsDirectory . '/pdfs/Name-Badge.pdf',
        $writer
    );

    $formFiller = new SetaPDF_FormFiller($document);
    $fields = $formFiller->getFields();
    $fields->get('Name')->setValue($participant['Name']);
    $fields->get('Company Name')->setValue($participant['Company Name']);

    // sadly not all PDF viewers render the barcode font correct
    $fields->get('barcode')->setValue('*' . $participant['id'] . '*');
    $fields->get('barcode text')->setValue($participant['id']);

    $document->save()->finish();

    echo '<a href="data:application/pdf;base64,' . base64_encode($writer) . '" download="' .
        $participant['id'] . '.pdf">Participant ' . $participant['id'] . '</a><br/>';

}