Generowanie archiwalnego wyjścia PDF/A-4
W skrócie
Dział zatytułowany „W skrócie”Użyj tego przepisu, aby za pomocą menedżera Pro PdfAManager wygenerować archiwalne wyjście PDF/A-4 (Międzynarodowa Organizacja Normalizacyjna (ISO) 19005-4). Podczas zapisu NextPDF przygotowuje element OutputIntent, osadzony profil International Color Consortium (ICC) oraz metadane identyfikacyjne. NextPDF generuje wyjście ukierunkowane na zgodność; samą zgodność rozstrzyga niezależny walidator. Przepis opiera się na examples/32-pdfa4-icc.php.
Instalacja
Dział zatytułowany „Instalacja”composer require nextpdf/core:^3composer require nextpdf/proPDF/A-4 to funkcja warstwy Pro. W instalacji obejmującej wyłącznie Core wywołanie enablePdfA() zgłasza InvalidConfigException. Komunikat wskazuje brakującą zdolność security.pdfa oraz podpowiada rozwiązanie composer require nextpdf/pro. Do weryfikacji potrzebny jest walidator PDF/A dostępny w PATH. W przykładach użyto veraPDF z --flavour 4.
Przegląd koncepcyjny
Dział zatytułowany „Przegląd koncepcyjny”PDF/A-4 to profil archiwalny ISO 19005-4 zbudowany na ISO 32000-2 (PDF 2.0). Zgodny plik ma deterministyczny kolor i jest samowystarczalny. Deklaruje element OutputIntent, który odwołuje się do osadzonego docelowego profilu ICC, dzięki czemu kolor jest odtwarzany bez zasobów zewnętrznych (§6.2.3). Każdy program czcionki jest osadzony (§6.2.10.4.1). Dokument zawiera metadane identyfikacyjne pdfaid w formacie Extensible Metadata Platform (XMP) (§6.7.3). Plik nie jest zaszyfrowany (§6.6.4 — PDF/A zabrania klucza zwiastuna Encrypt).
NextPDF modeluje PDF/A za pomocą typowanego wyliczenia ConformanceMode. enablePdfA() tworzy egzemplarz menedżera Pro PdfAManager i domyślnie przyjmuje ConformanceMode::PdfA4. Podczas save() menedżer przygotowuje element OutputIntent, strumień ICC oraz schematy rozszerzeń XMP. Dyskryminatory pdfaPart() oraz pdfaConformanceLetter() utrzymują metadane pdfaid:part / pdfaid:conformance w zgodzie z wybranym wariantem (bazowy 4, 4e, 4f). Profil bazowy nie emituje litery pdfa:conformance, zgodnie z wymaganiem tej części.
Powierzchnia API
Dział zatytułowany „Powierzchnia API”Powierzchnia API jest generowana z PHPDoc. Użyj tych kluczowych punktów wejścia:
\NextPDF\Core\Document::createStandalone(): DocumentDocument::enablePdfA(?object $version = null): static\NextPDF\Support\CapabilityRegistry::getInstance()->get('security.pdfa')->isAvailable(): bool\NextPDF\Conformance\ConformanceMode::PdfA4/PdfA4e/PdfA4fConformanceMode::pdfaPart(): 2|3|4|nullorazConformanceMode::pdfaConformanceLetter(): string
Przykład kodu — szybki start
Dział zatytułowany „Przykład kodu — szybki start”<?php
declare(strict_types=1);
require_once __DIR__ . '/../vendor/autoload.php';
use NextPDF\Core\Document;use NextPDF\Support\CapabilityRegistry;
$out = __DIR__ . '/output/32-pdfa4-icc.pdf';
// Probe before activating a Pro-gated feature so a Core-only install// gets an actionable message instead of a stack trace.$registry = CapabilityRegistry::getInstance();if (!$registry->get('security.pdfa')->isAvailable()) { fwrite(STDERR, "PDF/A-4 requires nextpdf/pro. Run: composer require nextpdf/pro\n"); exit(1);}
$doc = Document::createStandalone();$doc->enablePdfA(); // defaults to ConformanceMode::PdfA4$doc->setTitle('Archival Record 2026-0042');$doc->setLanguage('en');$doc->addPage();$doc->setFont('helvetica', '', 12);$doc->cell(0, 10, 'This document targets PDF/A-4.', newLine: true);$doc->save($out); // PdfAManager emits OutputIntent + ICC + XMP here
echo "Created: output/32-pdfa4-icc.pdf\n";Przykład kodu — produkcja
Dział zatytułowany „Przykład kodu — produkcja”Użyj tego samowystarczalnego programu w środowisku testowym. W środowisku produkcyjnym uczyń werdykt walidatora bramką w procesie kompilacji. Pomyślne wywołanie save() potwierdza, że NextPDF wyemitował artefakty; zgodność potwierdza wyłącznie walidator.
<?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');
if (!CapabilityRegistry::getInstance()->get('security.pdfa')->isAvailable()) { fwrite(STDERR, "PDF/A-4 requires nextpdf/pro. Run: composer require nextpdf/pro\n"); exit(1);}
try { $doc = Document::createStandalone(); $doc->enablePdfA(); // ConformanceMode::PdfA4
$doc->setTitle('Archival Record 2026-0042'); $doc->setLanguage('en'); $doc->addPage(); $doc->setFont('helvetica', '', 12); $doc->cell(0, 10, 'Long-term archival record. PDF/A-4 (ISO 19005-4).', newLine: true);
// Do NOT call setEncryption(): PDF/A prohibits the Encrypt key and // the call raises an incompatibility exception in either order. $doc->save($out);} catch (InvalidConfigException $e) { fwrite(STDERR, "PDF/A-4 activation failed: {$e->getMessage()}\n"); exit(1);}
$exitCode = 0;$report = [];exec('verapdf --flavour 4 ' . escapeshellarg($out), $report, $exitCode);
if ($exitCode !== 0) { fwrite(STDERR, "veraPDF FAILED — output is not PDF/A-4 conforming\n"); fwrite(STDERR, implode("\n", $report) . "\n"); exit(1);}
echo "veraPDF PASS — archival.pdf is reported PDF/A-4 conforming\n";Na hoście z zainstalowanym nextpdf/pro oraz z verapdf, który raportuje plik jako zgodny, oczekiwane wyjście standardowe (STDOUT) to:
veraPDF PASS — archival.pdf is reported PDF/A-4 conformingNa hoście wyłącznie z Core program kończy działanie z kodem różnym od zera po zapisaniu PDF/A-4 requires nextpdf/pro. Run: composer require nextpdf/pro na standardowe wyjście błędów (STDERR). Jeśli verapdf zgłosi problem, program kończy działanie z kodem różnym od zera po komunikacie veraPDF FAILED — output is not PDF/A-4 conforming. Komunikat przypisuje werdykt narzędziu veraPDF; NextPDF nie deklaruje zgodności z PDF/A-4.
Przypadki brzegowe i pułapki
Dział zatytułowany „Przypadki brzegowe i pułapki”- Bramka Pro. W instalacji obejmującej wyłącznie Core
enablePdfA()zgłaszaInvalidConfigException. Komunikat wskazujesecurity.pdfaoraz rozwiązaniecomposer require nextpdf/pro. Najpierw odpytaj rejestr, aby wyświetlić czytelny komunikat dla operatora. - Konflikt z szyfrowaniem. Jeśli wywołasz
setEncryption(),useAesGcm()lubsetPublicKeyEncryption()na dokumencie PDF/A, NextPDF zgłasza wyjątek niezgodności niezależnie od kolejności wywołań. PDF/A-4 zabrania klucza zwiastunaEncrypt(ISO 19005-4 §6.6.4). - Wariant zgodności. Przekaż obiekt Pro
PdfAVersiondoenablePdfA(), aby wybrać wariant4e(inżynieria, 3D) lub4f(załączniki plików). Profil bazowy nie emituje literypdfa:conformance; warianty4e/4fustawiająE/F. DyskryminatorConformanceModeutrzymuje spójnośćpdfaid:part. - Tagowanie jest niezależne. Profil bazowy PDF/A-4 traktuje tagowanie jako opcjonalne. Aby uzyskać produkt jednocześnie dostępny i archiwalny, włącz tryb tagowany oraz PDF/A osobno; zobacz przepis PDF/UA-2.
- Bramką jest walidator. Pomyślne wywołanie
save()oznacza, że artefakty zostały wyemitowane, a nie że plik jest zgodny. Nie deklaruj zgodności z PDF/A-4, dopóki walidator nie przejdzie pomyślnie.
Wydajność
Dział zatytułowany „Wydajność”Element OutputIntent dodaje jeden strumień profilu ICC (kilkaset KB dla sRGB) oraz pakiet XMP. Osadzanie czcionek dominuje w rozmiarze, gdy dokument używa czcionek spoza zestawu base-14. W przypadku typowych dokumentów archiwalnych przepis mieści się w budżecie 2000 ms / 128 MB. Obowiązuje profil odtwarzalności semantycznej: porównuj wynik ukierunkowany na walidator na poziomie strukturalnego drzewa składni abstrakcyjnej (AST) oraz metadanych, a nie surowych bajtów.
Uwagi dotyczące bezpieczeństwa
Dział zatytułowany „Uwagi dotyczące bezpieczeństwa”Rezydencja danych i środki ograniczające ryzyko PII
Dział zatytułowany „Rezydencja danych i środki ograniczające ryzyko PII”Wyjście archiwalne jest z założenia długowieczne i samowystarczalne. Wszelkie dane osobowe zawarte w treści pozostają przez cały okres życia archiwum. Osadzony profil ICC oraz metadane są przenoszone wraz z plikiem. Przed archiwizacją zastosuj zasady retencji i minimalizacji. PDF/A-4 nie definiuje semantyki redakcji.
Bezpieczna telemetria i czyszczenie dzienników
Dział zatytułowany „Bezpieczna telemetria i czyszczenie dzienników”Przepis zapisuje wyłącznie stały wiersz postępu. Wyjście veraPDF może zawierać fragmenty treści; w przypadku dokumentów z wrażliwą treścią trzymaj dzienniki walidatora poza współdzielonymi miejscami zbierania dzienników.
Model zagrożeń
Dział zatytułowany „Model zagrożeń”PDF/A-4 to profil wierności archiwalnej, a nie mechanizm kontroli integralności ani autentyczności. Nie podpisuje pliku ani nie sprawia, że manipulacja staje się widoczna. Połącz go z podpisem, gdy istotne jest pochodzenie. Osobny przepis omawia podpis. Zgodnie ze specyfikacją szyfrowanie wzajemnie wyklucza się z PDF/A.
Zachowanie w trybie FIPS
Dział zatytułowany „Zachowanie w trybie FIPS”Ten przepis nie wykonuje żadnej operacji kryptograficznej. Tryb Federal Information Processing Standards (FIPS) nie zmienia jego zachowania. PDF/A-4 zabrania szyfrowania, więc żaden szyfr nie jest wybierany.
Zgodność
Dział zatytułowany „Zgodność”| Stwierdzenie | Specyfikacja | Klauzula | reference_id |
|---|---|---|---|
| PDF/A-4 wymaga elementu OutputIntent odwołującego się do osadzonego profilu ICC. | ISO 19005-4 | §6.2.3 | |
| Kolor jest niezależny od urządzenia dzięki docelowemu profilowi wyjściowemu. | ISO 19005-4 | §6.2.4.3 | |
| Każdy program czcionki jest osadzony. | ISO 19005-4 | §6.2.10.4.1 | |
| Dokument przenosi identyfikację pdfaid w XMP. | ISO 19005-4 | §6.7.3 | |
| Szyfrowanie jest zabronione w PDF/A-4. | ISO 19005-4 | §6.6.4 | |
| O zgodności decyduje walidator, a nie producent. | ISO 19005-4 | §6.7.3 |
NextPDF generuje wyjście ukierunkowane na zgodność z PDF/A-4. Wsparcie to nie zgodność; przetestowany profil to nie certyfikacja. Ten przepis nie stanowi deklaracji zgodności; rozstrzyga o tym niezależny walidator, taki jak veraPDF. Uczyń jego werdykt bramką w procesie kompilacji.