Skip to content

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 合规管线,涵盖元数据、色彩配置与合规性验证。

核心类

说明
PdfAManagerPDF/A 合规流程管理器
PdfAVersionPDF/A 版本枚举(A4、A4f、A4e)
XmpMetadataXMP 元数据生成器
OutputIntent输出意图定义
IccProfileICC 色彩配置文件加载器

PdfAVersion 版本枚举

说明
PdfAVersion::A4PDF/A-4 基本合规
PdfAVersion::A4fPDF/A-4f,允许嵌入任意格式文件
PdfAVersion::A4ePDF/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');

下一步

以 LGPL-3.0-or-later 许可证发布。