PDF/A-4 归档
★ Pro — Commercial License Required
PDF/A-4 归档功能需要 Pro 包。
PDF/A-4 是基于 PDF 2.0 的最新归档标准(ISO 19005-4:2020),旨在确保文件能在数十年后仍可被完整重现。Pro 包提供完整的 PDF/A-4 合规管线,涵盖元数据、色彩配置与合规性验证。
核心类
| 类 | 说明 |
|---|---|
PdfAManager | PDF/A 合规流程管理器 |
PdfAVersion | PDF/A 版本枚举(A4、A4f、A4e) |
XmpMetadata | XMP 元数据生成器 |
OutputIntent | 输出意图定义 |
IccProfile | ICC 色彩配置文件加载器 |
PdfAVersion 版本枚举
| 值 | 说明 |
|---|---|
PdfAVersion::A4 | PDF/A-4 基本合规 |
PdfAVersion::A4f | PDF/A-4f,允许嵌入任意格式文件 |
PdfAVersion::A4e | PDF/A-4e,允许嵌入 3D 工程数据 |
启用 PDF/A-4
php
use Yeeefang\TcpdfNext\Core\Document;
use Yeeefang\TcpdfNext\Pro\Archive\PdfAManager;
use Yeeefang\TcpdfNext\Pro\Archive\PdfAVersion;
use Yeeefang\TcpdfNext\Pro\Archive\OutputIntent;
use Yeeefang\TcpdfNext\Pro\Archive\IccProfile;
$pdf = Document::create();
$manager = new PdfAManager($pdf);
$manager->enable(PdfAVersion::A4);
$manager->setOutputIntent(
OutputIntent::create()
->subtype('GTS_PDFA1')
->outputConditionIdentifier('sRGB IEC61966-2.1')
->registryName('http://www.color.org')
->info('sRGB IEC61966-2.1')
->iccProfile(IccProfile::sRGB())
);
$pdf->addPage()
->font('Helvetica', size: 12)
->text('此文件符合 PDF/A-4 归档标准。')
->save('/output/pdfa4.pdf');XmpMetadata
PDF/A-4 要求文件包含 XMP 元数据,且必须包含 PDF/A 标识信息(pdfaid:part=4)。
php
use Yeeefang\TcpdfNext\Pro\Archive\XmpMetadata;
$xmp = XmpMetadata::create()
->title('年度财务报告')
->author('财务部')
->description('2025 年度经审计之财务报表')
->subject(['财务', '年报', '审计'])
->language('zh-CN')
->creatorTool('TCPDF-Next Pro v1.0')
->createDate('2025-03-15T10:00:00+08:00');
$manager->setXmpMetadata($xmp);自定义命名空间
php
$xmp->addCustomNamespace(
prefix: 'invoice',
uri: 'urn:example:invoice:1.0',
properties: [
'invoiceNumber' => 'INV-2025-001',
'totalAmount' => '150000',
'currency' => 'TWD',
]
);OutputIntent 与 IccProfile
OutputIntent 定义文件的预期输出色彩条件,是 PDF/A 合规的必要条件。
内置 ICC 配置文件
php
use Yeeefang\TcpdfNext\Pro\Archive\IccProfile;
$srgb = IccProfile::sRGB(); // sRGB IEC61966-2.1
$cmyk = IccProfile::coatedFOGRA39(); // Coated FOGRA39
$custom = IccProfile::fromFile('/path/to/custom.icc');CMYK 输出意图
php
$manager->setOutputIntent(
OutputIntent::create()
->subtype('GTS_PDFA1')
->outputConditionIdentifier('FOGRA39')
->registryName('http://www.color.org')
->info('Coated FOGRA39 (ISO 12647-2:2004)')
->iccProfile(IccProfile::coatedFOGRA39())
);验证规则
PdfAManager 在输出前会自动检查合规性。以下是常见的验证规则:
| 规则 | 说明 | 严重性 |
|---|---|---|
| 必须有 OutputIntent | 文件必须定义输出意图 | 错误 |
| 必须有 XMP 元数据 | 包含 PDF/A 标识信息 | 错误 |
| 禁止加密 | PDF/A 不允许任何形式的加密 | 错误 |
| 字体必须嵌入 | 所有字体都必须完整嵌入或子集化 | 错误 |
| 禁止外部引用 | 不可引用外部内容 | 错误 |
| 交叉引用必须使用流 | PDF 2.0 要求使用交叉引用流 | 错误 |
| 透明度需要混合色彩空间 | 使用透明度时需有 OutputIntent | 警告 |
手动验证
php
$result = $manager->validate();
if ($result->isCompliant()) {
echo "文件符合 PDF/A-4 标准\n";
} else {
foreach ($result->violations() as $v) {
echo "[{$v->clause()}] {$v->message()}\n";
}
}结合 PDF/A-4 与数字签名
PDF/A 禁止加密,但允许数字签名。结合 PAdES B-LTA 签名可建立具法律效力的归档文件:
php
$manager = new PdfAManager($pdf);
$manager->enable(PdfAVersion::A4);
$manager->setOutputIntent(/* ... */);
$signer = new DigitalSigner($cert);
$signer->level(SignatureLevel::PAdES_B_LTA);
$signer->timestampAuthority($tsa);
LtvManager::embed($pdf, $signer);
$pdf->save('/output/pdfa4-signed.pdf');下一步
- 无障碍 (PDF/UA) — 结合 PDF/A-4 与 PDF/UA 建立无障碍归档文件。
- PAdES 数字签名 — 在归档文件上加入数字签名。
- 高级加密 — 了解为何 PDF/A 禁止加密。