Цифровые подписи PAdES
★ Pro — Commercial License Required
Уровни подписей PAdES B-T, B-LT и B-LTA требуют пакет Pro.
TCPDF-Next Pro реализует полный конвейер PAdES (ETSI EN 319 142) с использованием CertificateInfo, DigitalSigner, ByteRangeCalculator и SignatureAppearance.
Уровни подписей
| Уровень | Значение Enum | Что добавляет |
|---|---|---|
| B-B | SignatureLevel::PAdES_B_B | CMS-подпись с сертификатом подписанта |
| B-T | SignatureLevel::PAdES_B_T | Метка времени подписи RFC 3161 |
| B-LT | SignatureLevel::PAdES_B_LT | Данные отзыва (OCSP + CRL) через DSS |
| B-LTA | SignatureLevel::PAdES_B_LTA | Метка времени документа для бессрочной валидности |
CertificateInfo
Загружает и парсит сертификаты X.509 и приватные ключи из PEM или PKCS#12 файлов.
php
use Yeeefang\TcpdfNext\Pro\Security\Signature\CertificateInfo;
// From PEM files
$cert = CertificateInfo::fromPem('/certs/signing.pem', '/certs/signing.key', 'pw');
$cert->chain(['/certs/intermediate.pem', '/certs/root.pem']);
// From PKCS#12 (chain extracted automatically)
$cert = CertificateInfo::fromPkcs12('/certs/signing.p12', 'p12-password');
// Inspect certificate details
echo $cert->subjectCN(); // "John Doe"
echo $cert->issuerCN(); // "Acme Intermediate CA"
echo $cert->validFrom(); // DateTimeImmutable
echo $cert->ocspResponderUrl(); // "https://ocsp.acme.com"DigitalSigner
Генерирует контейнер подписи CMS/PKCS#7 и оркестрирует встраивание метки времени и LTV.
php
use Yeeefang\TcpdfNext\Core\Document;
use Yeeefang\TcpdfNext\Pro\Security\Signature\DigitalSigner;
use Yeeefang\TcpdfNext\Pro\Security\Timestamp\TsaClient;
use Yeeefang\TcpdfNext\Contracts\Enums\SignatureLevel;
$pdf = Document::create()->addPage()->text('Contract document.');
$cert = CertificateInfo::fromPkcs12('/certs/signer.p12', 'pw');
$tsa = new TsaClient('https://tsa.example.com/timestamp');
$signer = new DigitalSigner($cert);
$signer->level(SignatureLevel::PAdES_B_LTA);
$signer->timestampAuthority($tsa);
$signer->reason('Document approval');
$signer->location('Taipei, Taiwan');
$signer->sign($pdf);
$pdf->save('/output/signed.pdf');На уровнях B-LT и B-LTA LtvManager вызывается внутренне для получения OCSP-ответов и CRL и построения словаря DSS.
ByteRangeCalculator
Управляет плейсхолдером подписи и вычисляет диапазоны байтов. Обрабатывается внутренне DigitalSigner; прямое использование -- для продвинутых сценариев.
SignatureAppearance
Управляет видимым представлением подписи на странице. По умолчанию подписи невидимы.
php
use Yeeefang\TcpdfNext\Pro\Security\Signature\SignatureAppearance;
$appearance = SignatureAppearance::create()
->page(1)
->position(x: 20.0, y: 250.0, width: 80.0, height: 30.0)
->text("Digitally signed by John Doe\nDate: 2026-02-16")
->image('/images/handwritten-signature.png')
->imagePosition('left') // 'left', 'right', 'top', 'bottom', 'background'
->fontSize(8);
$signer->appearance($appearance);
$signer->sign($pdf);Полный пример B-LTA
php
use Yeeefang\TcpdfNext\Core\Document;
use Yeeefang\TcpdfNext\Pro\Security\Signature\{DigitalSigner, CertificateInfo, SignatureAppearance};
use Yeeefang\TcpdfNext\Pro\Security\Timestamp\TsaClient;
use Yeeefang\TcpdfNext\Contracts\Enums\SignatureLevel;
$pdf = Document::create()
->addPage()
->font('Helvetica', size: 14, style: 'B')
->text('Purchase Agreement')
->font('Helvetica', size: 11)
->text('This agreement is entered into on February 16, 2026...');
$cert = CertificateInfo::fromPkcs12('/certs/legal.p12', 'passphrase');
$tsa = new TsaClient('https://tsa.example.com/timestamp');
$signer = new DigitalSigner($cert);
$signer->level(SignatureLevel::PAdES_B_LTA);
$signer->timestampAuthority($tsa);
$signer->appearance(
SignatureAppearance::create()
->page(1)
->position(x: 20.0, y: 250.0, width: 80.0, height: 25.0)
->text("Signed by Legal Dept.\n2026-02-16")
);
$signer->reason('Purchase agreement execution');
$signer->location('Taipei, Taiwan');
$signer->sign($pdf);
$pdf->save('/contracts/purchase-agreement-signed.pdf');Далее
- Долгосрочная валидация -- DSS, OCSP, CRL и архивные метки времени.
- Интеграция HSM -- Подписание через аппаратные модули безопасности по PKCS#11.
- Обзор пакета Pro -- Полный перечень модулей и информация о лицензии.