Access Same Named Fields
This demo shows how to fill and access same named fields.
More information or use cases are documented here.
PHP
<?php
use setasign\SetaPDF2\Core\Document;
use setasign\SetaPDF2\Core\Writer\HttpWriter;
use setasign\SetaPDF2\FormFiller\FormFiller;
// load and register the autoload function
require_once __DIR__ . '/../../../../../bootstrap.php';
$writer = new HttpWriter('filled.pdf', true);
$document = Document::loadByFilename(
$assetsDirectory . '/pdfs/etown/Terms-and-Conditions.pdf',
$writer
);
$formFiller = new FormFiller($document);
// access the fields instance
$fields = $formFiller->getFields();
// this file has two fields with the name "Date"
// a duplicated field name is suffixed with #N
$fieldA = $fields->get('Date');
$fieldB = $fields->get('Date#1');
// you can access their original name through the getOriginalQualifiedName() method:
// $fieldA->getOriginalQualifiedName() === 'Date'
// $fieldB->getOriginalQualifiedName() === 'Date'
// you can also check for other same named/related fields that way:
// $relatedFields = $fields->getRelatedFields($fieldA);
// $relatedFields['Date#1'] === $fieldB
// $relatedFieldNames = $fields->getRelatedFieldNames('Date');
// $relatedFieldNames === ['Date#1']
// let's prepare a value
$value = $fieldA->getValue();
$value = str_replace(
['XXX', 'MM', 'YYYY'],
[mt_rand(123, 999), date('m'), date('Y')],
$value
);
// pass it for demonstration to $fieldB
$fieldB->setValue($value);
// both fields share the same value now
// $fieldA->getValue() === $value;
// now we flatten both fields manually to the pages content stream
// NOTICE: The flatten() call is NOT forwarded to same named fields!
// Same for appearance related things like an individual font!
$fieldA->flatten();
$fieldB->flatten();
$document->save()->finish();
