Create digital signatures for PDF documents with PHP

SetaPDF-Signer

Digital sign PDF documents with PHP

Sign a PDF Document Created With FPDF

This demo shows a signature process of a PDF document created with FPDF.

PHP
<?php

use setasign\SetaPDF2\Core\Document;
use setasign\SetaPDF2\Core\Writer\HttpWriter;
use setasign\SetaPDF2\Signer\PemHelper;
use setasign\SetaPDF2\Signer\Signature\Module\Cms as CmsModule;
use setasign\SetaPDF2\Signer\Signer;

require_once('fpdf.php');

// create an instance of FPDF
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial', 'B', 14);

// let's write some dynamic content
$text = 'This document is created with FPDF on '
    . date('r')
    . ' and digital signed with the SetaPDF-Signer component.';
$pdf->MultiCell(0, 8, $text);

// Output the PDF document to a string
$fpdf = $pdf->Output('S');

require_once('library/SetaPDF/Autoload.php');
// or if you use composer require_once('vendor/autoload.php');

// create a Http writer
$writer = new HttpWriter('fpdf-sign-demo.pdf', false);
// load document by filename
$document = Document::loadByString($fpdf, $writer);

// create a signer instance for the document
$signer = new Signer($document);

// set some signature properties
$signer->setReason('Demo with FPDF');
$signer->setLocation('setasign.com');

// ccreate a CMS module instance
$module = new CmsModule();
// set the sign certificate
$module->setCertificate(file_get_contents('certificate.pem'));
// set the private key for the sign certificate
$module->setPrivateKey([file_get_contents('private-key.pem'), 'password']);
// pass the intermediate certificate(s)
$module->setExtraCertificates(PemHelper::extractFromFile('intermediate-certificate.pem'));

// sign/certify the document
$signer->sign($module);

We use certificates from GlobalSign for demonstration. If you want to validate the signature in another viewer application, make sure that the root certificate is added as a trusted identity.