Signature Fields
Table of Contents
Introduction
A digital signature in a PDF document requires a signature field. This field may be hidden or displayed through a widget annotation on a specific page.
The SetaPDF-Signer component represents a signature field through the SetaPDF_Signer_SignatureField
class. This class comes with some static method to add, get or remove signature fields by their names.
Create Hidden Signature Fields
Simple hidden signature fields can be created by just some lines of code. The document instance could be created by an existing document as well!
To automatically get or create a signature field instance the class also offers a get()
method, that will create a hidden signature field automatically if no signature field was found:
$field = SetaPDF_Signer_SignatureField::get($document, 'Signature');
Creating Visible Signature Fields
The SetaPDF_Signer_SignatureField
class allows you to create visible signature fields by absolute or relative positions.
Naming of Signature Fields
If no name parameter is passed to either the add()
or get()
methods, the default field name will be used:
The default signature field name
If a name that is passed to the add()
method already exists it will be suffixed with a numeric incrementing value.
You can check the final name with the getQualifiedName()
method.
So a common logic to have a unique signature field would be:
$field = $signer->addSignatureField(); $signer->setSignatureFieldName($field->getQualifiedName());
Handle Existing Signature Fields
To get the names of existing signature fields, the SetaPDF_Signer
class offers the needed method:
Description
Returns all signature field names.
Parameters
- $document : SetaPDF_Core_Document
Exceptions
Throws SetaPDF_Core_SecHandler_Exception
Throws SetaPDF_Core_Type_Exception
Check if a Signature Field is in Use
You can use the getValue()
method of a SetaPDF_Signer_SignatureField
instance to check if the field is in use or not:
$signatureFieldNames = \SetaPDF_Signer::getSignatureFieldNames($document); foreach ($signatureFieldNames as $signatureFieldName) { $field = \SetaPDF_Signer_SignatureField::get($document, $signatureFieldName); if ($field->getValue() === null) { echo "Signature field '" . $signatureFieldName . "' is NOT in use!\n"; } else { echo "Signature field '" . $signatureFieldName . "' is in use!\n"; } }
Delete an Existing Signature Field
If you want to delete an existing signature field you can use following static method of the SetaPDF_Signer_SignatureField
class:
Description
Deletes a signature field by its name.
ATTENTION: If there are other signature fields in use their signature will get invalid.
Parameters
- $document : SetaPDF_Core_Document
- $fieldName : string
Exceptions
Throws SetaPDF_Core_Exception
Throws SetaPDF_Core_SecHandler_Exception
Throws SetaPDF_Core_Type_Exception
Throws SetaPDF_Core_Type_IndirectReference_Exception
Throws SetaPDF_Signer_Exception
Clear an Existing Signature Field Value
It is an uncommon task but sometimes it is needed to reset or clear the signature value of an existing signature field. For this task the SetaPDF_Signer_SignatureField
class comes with an additional static method:
Description
Clears the signature from a signature field by its name.
Parameters
- $document : SetaPDF_Core_Document
- $fieldName : string
- $clearAppearance : bool
Define whether the appearance is cleared or not, too.
Exceptions
Throws SetaPDF_Core_Exception
Throws SetaPDF_Core_SecHandler_Exception
Throws SetaPDF_Core_Type_Exception
Throws SetaPDF_Core_Type_IndirectReference_Exception
Throws SetaPDF_Signer_Exception