Przejdź do głównej zawartości

Zgodność z PDF/A-4: co NextPDF generuje na potrzeby ISO 19005-4

Zastrzeżenie dotyczące zakresu. NextPDF generuje dane wyjściowe zaprojektowane z myślą o zgodności z PDF/A-4. Biblioteka nie potwierdza zgodności; robi to walidator, taki jak veraPDF.

PDF/A-4 to ISO 19005-4:2020, profil archiwizacji oparty na PDF 2.0. NextPDF Core obsługuje dyskryminator ConformanceMode (PdfA4, PdfA4e, PdfA4f). Silnik Premium nextpdf/pro w trakcie save() generuje OutputIntent, osadzony profil ICC oraz schemat identyfikacyjny pdfaid w ramach Extensible Metadata Platform (XMP). Biblioteka tworzy artefakty; zgodność ocenia veraPDF. Norma ISO 19005-4 §6.7.3 wskazuje jednoznacznie: właściwości pdfaid:part/pdfaid:rev „same w sobie nie przesądzają o zgodności”.

Okno terminala
composer require nextpdf/core:^3
composer require nextpdf/pro # OutputIntent + ICC + XMP authoring

Core rejestruje funkcję security.pdfa, ale bez nextpdf/pro zgłasza ją jako niedostępną. W takiej konfiguracji enablePdfA() zgłasza wyjątek InvalidConfigException z informacją o ścieżce uaktualnienia, zamiast generować plik niezgodny.

Document::enablePdfA(?object $version = null) mapuje wartość wejściową wyliczenia PdfAVersion na przypadek ConformanceMode. W przypadku nierozpoznanej wartości wejściowej przyjmuje domyślnie ConformanceMode::PdfA4 ('4e' → PdfA4e, '4f' → PdfA4f). Tryb wyznacza trzy obowiązki generatora dla pliku zgodnego:

  • OutputIntent + ICC — §6.2.3 pozwala plikowi zgodnemu określić charakterystykę kolorystyczną za pomocą OutputIntent PDF/A-4, który odwołuje się do strumienia International Color Consortium (ICC) DestOutputProfile. Zgodnie z §6.2.4.1 jest to jedna z dwóch dozwolonych ścieżek dla koloru niezależnego od urządzenia (drugą jest bezpośrednie określenie przestrzeni kolorów niezależnych od urządzenia). OutputIntent to ścieżka wybrana przez NextPDF, a nie bezwarunkowy wymóg normy.
  • Identyfikacja pdfaid — §6.7.3 wymaga schematu identyfikacyjnego PDF/A w metadanych XMP na poziomie dokumentu (przestrzeń nazw AIIM pdfaid) z pdfaid:part/pdfaid:rev. PDF/A-4e i PDF/A-4f ustawiają dodatkowo pdfa:conformance (E / F). §6.7.3 stanowi, że plik niezgodny z żadnym z tych profili nie może podawać wartości pdfa:conformance.
  • Osadzanie czcionek — §6.2.10 wymaga osadzenia wszystkich czcionek używanych do renderowania.

NextPDF generuje te artefakty. Nie ustala zgodności według §5. To zadanie veraPDF; §6.7.3 zastrzega ustalenie zgodności dla tego procesu.

MetodaEfekt
enablePdfA(?object $version = null): staticMapuje na ConformanceMode::PdfA4/PdfA4e/PdfA4f; planuje OutputIntent + ICC + XMP w save(). Gdy brakuje nextpdf/pro, zgłasza InvalidConfigException|PageLayoutException|CompressionException.
ConformanceMode::pdfaPart(): ?intZwraca część normy ISO 19005 dla aktywnego trybu (4 dla PdfA4*).
ConformanceMode::pdfaConformanceLetter(): stringZwraca literę pdfa:conformance (E / F) lub wartość pustą.
<?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";

Użyj werdyktu walidatora jako bramki procesu budowania. Uruchom verapdf --flavour 4 na danych wyjściowych i przerwij proces budowania przy niezerowym kodzie wyjścia. Werdykt walidatora jest bramką; dane generowane przez bibliotekę są dla niego wejściem, nigdy samym werdyktem. Zobacz /cookbook/php/pdfa4-conformance-gate/, aby poznać pełny potok z taką bramką.

  • Włącz przed dodaniem treści. Wywołaj enablePdfA() przed dodaniem treści. Późniejsze włączenie nie przetwarza ponownie już zapisanych obiektów.
  • Brak szyfrowania. PDF/A zakazuje klucza Encrypt. Nie wywołuj setEncryption() na dokumencie PDF/A. Szyfrowanie to poufność, a nie integralność archiwizacyjna, i te dwie cechy wzajemnie się tu wykluczają.
  • pdfa:conformance jest warunkowe. Tę wartość ustawiają tylko PDF/A-4e i PDF/A-4f. Wygenerowanie jej w zwykłym pliku PDF/A-4 jest samo w sobie naruszeniem zgodności (§6.7.3) — przypadek ConformanceMode zapobiega temu z założenia.
  • Załączniki PDF/A-4f. Pliki osadzone w pliku PDF/A-4f muszą zawierać klucze F i UF (klucz Desc zalecany) zgodnie z §6.7.5. Obsługuje to hybrydową ścieżkę ZUGFeRD/Factur-X.

Osadzanie OutputIntent + ICC dodaje strumień ICC o stałym rozmiarze (profil przestrzeni roboczej) oraz pakiet XMP podczas save(). Budżet wynosi ≤ 1500 ms czasu rzeczywistego i ≤ 128 MB szczytowego zużycia pamięci dla typowego dokumentu.

PDF/A-4 zabrania szyfrowania. Profil nakłada ograniczenia dotyczące archiwizacji i trwałości, ale nie jest mechanizmem zabezpieczeń. Przechowywanie kluczy i polityka weryfikatora są poza zakresem tego profilu; zobacz centrum zaufania.

Generowanie PDF/A-4 działa w ramach procesu i zapisuje wyłącznie dokument, osadzony profil ICC oraz pakiet XMP. Żadna treść nie opuszcza procesu. Za dane osobowe (PII) zawarte w treści źródłowej odpowiada integrator. Profil nie usuwa danych wrażliwych.

Przykład wypisuje na STDERR wyłącznie ścieżkę wyjściową i polecenie walidatora. Nie zapisuje w dziennikach żadnych bajtów dokumentu. Przepis respektuje NEXTPDF_COOKBOOK_OUTPUT i nigdy nie wypisuje pliku PDF do STDOUT.

Sam plik PDF/A-4 nie zapewnia kontroli dostępu. Każdy, kto ma ten plik, może go odczytać. Profil zapewnia trwałość renderowania, a nie poufność. Traktuj strumień ICC OutputIntent jako publiczny.

Generowanie PDF/A-4 nie wykonuje żadnych operacji kryptograficznych. Podpis cyfrowy w pliku PDF/A-4 (PDF/A-4 §6.5 dopuszcza profile PAdES) jest odrębnym tematem przepisu dotyczącego podpisu i dziedziczy stanowisko tego przepisu wobec FIPS. Ta strona nie formułuje żadnych zapewnień dotyczących podpisywania.

ZapewnienieNormaKlauzulareference_id
Plik PDF/A-4 może określić swoją charakterystykę kolorystyczną za pomocą OutputIntent PDF/A odwołującego się do profilu ICC DestOutputProfile.ISO 19005-4§6.2.3
Kolor niezależny od urządzenia można określić bezpośrednio lub pośrednio za pomocą DestOutputProfile w OutputIntent (jedna z dwóch dozwolonych dróg).ISO 19005-4§6.2.4.1
Wersja PDF/A jest identyfikowana za pomocą schematu identyfikacyjnego PDF/A (pdfaid) w metadanych XMP dokumentu.ISO 19005-4§6.7.3
pdfaid:part / pdfaid:rev same w sobie nie przesądzają o zgodności; ustalenie zgodności przeprowadza się zgodnie z klauzulą 5.ISO 19005-4§6.7.3
Plik niezgodny ani z PDF/A-4e, ani z PDF/A-4f nie może podawać wartości pdfa:conformance.ISO 19005-4§6.7.3
Pliki osadzone w PDF/A-4f wymagają kluczy F i UF (klucz Desc zalecany).ISO 19005-4§6.7.5
Wszystkie czcionki używane do renderowania muszą być osadzone.ISO 19005-4§6.2.10
Użycie przezroczystości / koloru zależy od zadeklarowanego OutputIntent.ISO 19005-4§6.2.9

Cytowania zawierają identyfikator klauzuli oraz wskaźniki reference_id do korpusu weryfikacyjnego. Nie powiela się tekstu norm; NextPDF podsumowuje klauzule własnymi słowami.