Conformidade PDF/A-4: o que o NextPDF emite para a ISO 19005-4
Visão geral
Seção intitulada “Visão geral”Declaração de limite. O NextPDF produz uma saída destinada a se conformar ao PDF/A-4. A biblioteca não declara conformidade; quem faz isso é um validador, como o veraPDF.
O PDF/A-4 é a ISO 19005-4:2020, o perfil de arquivamento baseado em PDF 2.0. O NextPDF Core carrega o discriminador ConformanceMode (PdfA4, PdfA4e, PdfA4f). O mecanismo Premium nextpdf/pro emite o OutputIntent, o perfil ICC incorporado e o esquema de identificação pdfaid do Extensible Metadata Platform (XMP) durante o save(). A biblioteca produz os artefatos; o veraPDF decide a conformidade. A ISO 19005-4 §6.7.3 é explícita: as propriedades pdfaid:part/pdfaid:rev “não determinam, por si só, a conformidade”.
Instalação
Seção intitulada “Instalação”composer require nextpdf/core:^3composer require nextpdf/pro # OutputIntent + ICC + XMP authoringO Core registra a capacidade security.pdfa, mas a reporta como indisponível sem o nextpdf/pro. Nesse caso, enablePdfA() lança InvalidConfigException com um caminho de upgrade, em vez de emitir um arquivo não conforme.
Visão conceitual
Seção intitulada “Visão conceitual”Document::enablePdfA(?object $version = null) mapeia uma entrada do enum PdfAVersion para um caso de ConformanceMode. Por padrão, ele assume ConformanceMode::PdfA4 para entradas não reconhecidas ('4e' → PdfA4e, '4f' → PdfA4f). O modo determina três obrigações de emissão para um arquivo conforme:
- OutputIntent + ICC — a §6.2.3 permite que um arquivo conforme especifique suas características de cor com um OutputIntent PDF/A-4 que referencia um stream International Color Consortium (ICC)
DestOutputProfile. Conforme a §6.2.4.1, essa é uma das duas rotas permitidas para cor independente de dispositivo (a outra é especificar diretamente espaços de cor independentes de dispositivo). O OutputIntent é a rota que o NextPDF adota, não uma exigência incondicional da norma. - Identificação
pdfaid— a §6.7.3 exige o esquema de identificação PDF/A no XMP em nível de documento (o namespace AIIMpdfaid) compdfaid:part/pdfaid:rev. O PDF/A-4e e o PDF/A-4f também definempdfa:conformance(E / F). A §6.7.3 determina que um arquivo que não se conforme a nenhum dos dois não deve fornecer um valorpdfa:conformance. - Incorporação de fontes — a §6.2.10 exige que todas as fontes usadas na renderização sejam incorporadas.
O NextPDF emite esses artefatos. Ele não executa a determinação de conformidade da §5. Essa é a tarefa do veraPDF, e a §6.7.3 reserva a determinação para esse processo.
Superfície da API
Seção intitulada “Superfície da API”| Método | Efeito |
|---|---|
enablePdfA(?object $version = null): static | Roteia para ConformanceMode::PdfA4/PdfA4e/PdfA4f; agenda OutputIntent + ICC + XMP no save(). Lança InvalidConfigException|PageLayoutException|CompressionException if nextpdf/pro estiver ausente. |
ConformanceMode::pdfaPart(): ?int | Retorna a parte da ISO 19005 correspondente ao modo ativo (4 para PdfA4*). |
ConformanceMode::pdfaConformanceLetter(): string | Retorna a letra de pdfa:conformance (E / F) ou uma string vazia. |
Exemplo de código — Início rápido
Seção intitulada “Exemplo de código — Início rápido”<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;use NextPDF\Exception\InvalidConfigException;use NextPDF\Support\CapabilityRegistry;
$out = getenv('NEXTPDF_COOKBOOK_OUTPUT') ?: __DIR__ . '/archival.pdf';
$registry = CapabilityRegistry::getInstance();if (!$registry->get('security.pdfa')->isAvailable()) { fwrite(STDERR, "PDF/A-4 requires nextpdf/pro.\n"); exit(1);}
try { $doc = Document::createStandalone(); $doc->enablePdfA(); // ConformanceMode::PdfA4 $doc->setTitle('Archival Record 2026-0042'); $doc->setLanguage('en'); $doc->writeHtml('<h1>Archival record</h1><p>Body.</p>'); $doc->save($out); // OutputIntent + ICC + XMP scheduled here} catch (InvalidConfigException $e) { fwrite(STDERR, $e->getMessage() . "\n"); exit(1);}
echo "Wrote {$out} — validate: verapdf --flavour 4 {$out}\n";Exemplo de código — Produção
Seção intitulada “Exemplo de código — Produção”Use o veredito do validador como uma barreira de build. Execute verapdf --flavour 4 sobre a saída e faça o build falhar diante de um código de saída diferente de zero. O veredito do validador é a barreira; a emissão da biblioteca é a entrada para ela, nunca o próprio veredito. Consulte /cookbook/php/pdfa4-conformance-gate/ para conhecer o pipeline completo com barreira.
Casos extremos e armadilhas
Seção intitulada “Casos extremos e armadilhas”- Habilite antes do conteúdo. Chame
enablePdfA()antes de adicionar conteúdo. A habilitação retroativa não reprocessa objetos já gravados. - Sem criptografia. O PDF/A proíbe a chave
Encrypt. Não chamesetEncryption()em um documento PDF/A. A criptografia diz respeito à confidencialidade, não à integridade de arquivamento, e as duas são mutuamente exclusivas aqui. pdfa:conformanceé condicional. Apenas o PDF/A-4e e o PDF/A-4f a definem. Emiti-la em um arquivo PDF/A-4 simples é, por si só, uma violação de conformidade (§6.7.3) — o caso deConformanceModeimpede isso por construção.- Anexos do PDF/A-4f. Os arquivos incorporados em um arquivo PDF/A-4f devem conter as chaves
FeUF(Desc recomendado) conforme a §6.7.5. Isso dá suporte ao caminho híbrido ZUGFeRD/Factur-X.
Desempenho
Seção intitulada “Desempenho”A incorporação de OutputIntent + ICC adiciona um stream ICC de tamanho fixo (o perfil de espaço de trabalho) e o pacote XMP no save(). O orçamento é de tempo total ≤ 1500 ms e pico ≤ 128 MB para um documento típico.
Notas de segurança
Seção intitulada “Notas de segurança”O PDF/A-4 proíbe a criptografia. O perfil é uma restrição de arquivamento e longevidade, não um controle de segurança. A custódia de chaves e a política do verificador estão fora do escopo deste perfil; consulte o centro de confiança.
Residência de dados e mitigações de PII
Seção intitulada “Residência de dados e mitigações de PII”A emissão PDF/A-4 é executada no próprio processo e grava apenas o documento, o perfil ICC incorporado e o pacote XMP. Nenhum conteúdo deixa o processo. As informações de identificação pessoal (PII) no conteúdo de origem são de responsabilidade do integrador. O perfil não faz redação.
Telemetria segura e limpeza de logs
Seção intitulada “Telemetria segura e limpeza de logs”O exemplo grava no STDERR apenas o caminho de saída e o comando do validador. Ele não registra nenhum byte do documento. A receita respeita NEXTPDF_COOKBOOK_OUTPUT e nunca imprime o PDF no STDOUT.
Modelo de ameaças
Seção intitulada “Modelo de ameaças”Um arquivo PDF/A-4 não tem controle de acesso. Qualquer pessoa que tenha o arquivo pode lê-lo. O perfil dá suporte à longevidade da renderização, não à confidencialidade. Trate o stream ICC do OutputIntent como público.
Comportamento em modo FIPS
Seção intitulada “Comportamento em modo FIPS”A emissão PDF/A-4 não realiza criptografia. Uma assinatura digital em um arquivo PDF/A-4 (a §6.5 do PDF/A-4 permite perfis PAdES) é uma preocupação separada, tratada pela receita de assinatura, e herda a postura FIPS dessa receita. Esta página não faz nenhuma afirmação sobre assinatura.
Conformidade
Seção intitulada “Conformidade”| Afirmação | Norma | Cláusula | reference_id |
|---|---|---|---|
| Um arquivo PDF/A-4 pode especificar suas características de cor com um OutputIntent PDF/A que referencie um perfil ICC DestOutputProfile. | ISO 19005-4 | §6.2.3 | |
| A cor independente de dispositivo pode ser especificada direta ou indiretamente via DestOutputProfile do OutputIntent (uma das duas rotas permitidas). | ISO 19005-4 | §6.2.4.1 | |
| A versão PDF/A é identificada via esquema de identificação PDF/A (pdfaid) no XMP do documento. | ISO 19005-4 | §6.7.3 | |
| pdfaid:part / pdfaid:rev não determinam, por si só, a conformidade; a determinação é realizada conforme a Cláusula 5. | ISO 19005-4 | §6.7.3 | |
| Um arquivo que não se conforme nem ao PDF/A-4e nem ao PDF/A-4f não deve fornecer um valor pdfa:conformance. | ISO 19005-4 | §6.7.3 | |
| Os arquivos incorporados do PDF/A-4f exigem as chaves F e UF (Desc recomendado). | ISO 19005-4 | §6.7.5 | |
| Todas as fontes usadas na renderização devem ser incorporadas. | ISO 19005-4 | §6.2.10 | |
| O uso de transparência / cor depende de um OutputIntent declarado. | ISO 19005-4 | §6.2.9 |
As citações são o ID da cláusula e ponteiros reference_id para o corpus de verificação. Nenhum texto da norma é reproduzido; o NextPDF resume as cláusulas com suas próprias palavras.