Przejdź do głównej zawartości

ISO 19005-4 (PDF/A-4): mapowanie funkcji NextPDF

International Organization for Standardization (ISO) 19005-4:2020 to profil archiwalny formatu Portable Document Format (PDF) 2.0 znany jako PDF/A-4. Ta strona mapuje ten profil na NextPDF bez rozszerzania deklarowanego zakresu obsługi: pokazuje, co emituje Core, co dodaje rozszerzenie nextpdf/pro i czego NextPDF wprost nie obejmuje. NextPDF emituje struktury istotne dla PDF/A-4; tylko walidator może stwierdzić, czy plik jest zgodny.

Okno terminala
composer require nextpdf/core:^3
# PDF/A-4 file authoring (OutputIntent + ICC + XMP) requires:
# composer require nextpdf/pro

ISO 19005-4:2020 opiera się na ISO 32000-2:2020 (PDF 2.0), podczas gdy PDF/A-2 i PDF/A-3 opierają się na ISO 32000-1:2008 (PDF 1.7). NextPDF odzwierciedla tę różnicę pochodzenia w ConformanceMode::requiresPdf17(). Metoda zwraca false dla każdego wariantu PDF/A-4 oraz true dla PDF/A-2 i PDF/A-3.

PDF/A-4 definiuje trzy warianty zgodności. Profil bazowy nie używa litery pdfa:conformance. PDF/A-4e (załącznik B, treści inżynierskie / 3D) ustawia pdfa:conformance = E. PDF/A-4f (załącznik A, pliki osadzone) ustawia pdfa:conformance = F. ISO 19005-4:2020 §6.7.3 określa schemat identyfikacji PDF/A w przestrzeni nazw Association for Intelligent Information Management (AIIM). Wskazuje on, że plik niezgodny ani z PDF/A-4e, ani z PDF/A-4f nie zawiera wpisu pdfa:conformance. NextPDF dokładnie odzwierciedla to zachowanie w ConformanceMode::pdfaConformanceLetter(): PdfA4 zwraca pusty ciąg znaków, PdfA4e zwraca E, PdfA4f zwraca F.

Kluczową granicą między edycjami jest tworzenie pliku PDF/A-4. Słownik OutputIntent, osadzony profil International Color Consortium (ICC), schemat rozszerzeń Extensible Metadata Platform (XMP), gwarancje tworzenia podzbiorów czcionek oraz zakaz szyfrowania są zaimplementowane w komponencie Enterprise PdfAManager. Komponent Enterprise PdfAManager jest częścią rozszerzenia nextpdf/pro. W instalacji zawierającej tylko Core Document::enablePdfA() zgłasza InvalidConfigException, ponieważ funkcja security.pdfa nie jest zarejestrowana. Gotowy do uruchomienia przykład (examples/32-pdfa4-icc.php) ilustruje to: sprawdza rejestr funkcji i przechodzi w tryb degradacji z czytelnym komunikatem zamiast śladu stosu.

Dlatego w samym Core powierzchnia PDF/A-4 jest wyłącznie dyskryminatorem. NextPDF rejestruje, który wariant PDF/A-4 deklaruje dokument. NextPDF emituje znaczniki pdfaid:part = 4 / pdfa:conformance zdefiniowane przez schemat. Utworzenie kompletnego pliku PDF/A-4 — oraz sprawdzenie jego zgodności — to odrębne kroki. Pierwszy krok wymaga nextpdf/pro. Drugi krok wymaga veraPDF.

PowierzchniaEdycjaCo udostępnia
ConformanceMode::PdfA4 / PdfA4e / PdfA4fcoreDyskryminator wariantu
ConformanceMode::pdfaPart()4coreNumer części ISO 19005
ConformanceMode::pdfaConformanceLetter()'' / 'E' / 'F'coreLitera zgodności zgodnie z §6.7.3
ConformanceMode::requiresPdf17()falsecoreBramka pochodzenia PDF 2.0
Document::enablePdfA()proTworzenie OutputIntent + ICC + XMP; w Core zgłasza InvalidConfigException
<?php
declare(strict_types=1);
use NextPDF\Conformance\ConformanceMode;
// Core: introspect the declared PDF/A-4f contract.
$mode = ConformanceMode::PdfA4f;
$mode->pdfaPart(); // 4
$mode->pdfaConformanceLetter(); // 'F' (ISO 19005-4:2020 §6.7.3 / Annex A)
$mode->requiresPdf17(); // false (PDF/A-4 is PDF 2.0 lineage)
<?php
declare(strict_types=1);
use NextPDF\Core\Document;
use NextPDF\Exception\InvalidConfigException;
use NextPDF\Support\CapabilityRegistry;
// PDF/A-4 file authoring requires the Premium extension. Probe first so a
// Core-only install gets a clear rationale, not a stack trace.
$registry = CapabilityRegistry::getInstance();
if (!$registry->get('security.pdfa')->isAvailable()) {
throw new InvalidConfigException(
configKey: 'security.pdfa',
givenValue: 'Core-only install',
expectedType: 'nextpdf/pro extension (Enterprise PdfAManager)',
);
}
$doc = Document::createStandalone();
$doc->enablePdfA(); // Emits OutputIntent + ICC + pdfaid XMP (Premium).
// … write content …
$doc->save(__DIR__ . '/out/archive-a4.pdf');
// The file now CARRIES PDF/A-4 structures. Conformance is still unproven
// until veraPDF asserts it:
//
// verapdf --flavour 4 out/archive-a4.pdf
  • Core nie może utworzyć pliku PDF/A-4. W Core enablePdfA() zgłasza wyjątek. Core udostępnia jedynie dyskryminator i znaczniki XMP.
  • Bazowy PDF/A-4 nie emituje pdfa:conformance. Zgodnie z ISO 19005-4:2020 §6.7.3 tylko PDF/A-4e i PDF/A-4f ustawiają literę. ConformanceMode::PdfA4 z założenia zwraca pusty ciąg znaków.
  • Pochodzenie PDF 2.0, a nie PDF 1.7. Częstym błędem jest ponowne użycie potoku PDF/A-3, który oczekuje %PDF-1.7. PDF/A-4 to PDF 2.0; requiresPdf17() zwraca false dla wszystkich wariantów PDF/A-4.
  • Walidacja ICC należy do Premium. Walidacja ICC OutputIntent zgodnie z ISO 19005-4:2020 §6.2.2 (sygnatura acsp, tablica znaczników, punkt bieli D50) jest obsługiwana przez komponent Enterprise PdfAManager, a nie przez Core.
  • Biblioteka nie certyfikuje pliku. Ustawienie PdfA4f i emitowanie znaczników nie oznacza, że wynik jest prawidłowym plikiem PDF/A-4f. Zwaliduj za pomocą veraPDF.

Powierzchnia PDF/A-4 w Core to czysta introspekcja typów wartościowych: dopasowanie match na wyliczeniu, O(1) i brak alokacji. Ścieżka tworzenia w Premium dodaje pakiet OutputIntent i ICC podczas zapisu. Koszt wynika z rozmiaru osadzonego profilu i jest obsługiwany w ramach budżetu zapisu. Walidacja veraPDF przebiega poza główną ścieżką, a nie podczas generowania.

PDF/A-4 zakazuje szyfrowania. Komponent Enterprise PdfAManager egzekwuje niezmiennik zakazu szyfrowania i porządkuje go względem enablePdfA(), tak aby kod wywołujący nie mógł przypadkowo połączyć Advanced Encryption Standard in Galois/Counter Mode (AES-GCM) z trybem archiwalnym. Zabezpieczenie wyprzedzające w HasSecurity::enablePdfA() w Core odrzuca nieobsługiwaną kombinację, zanim zostaną zapisane jakiekolwiek bajty. Szczegóły dotyczące potoku archiwalnego znajdziesz w modelu zagrożeń projektu.

Ta strona jest mapowaniem funkcji, a nie deklaracją zgodności.

Obszar ISO 19005-4:2020KlauzulaZakres pokrycia NextPDFStatus
Schemat identyfikacji wariantu§6.7.3ConformanceMode emituje pdfaid:part = 4 oraz literę pdfa:conformanceZadeklarowane (Core; testy jednostkowe w tests/Unit/Conformance/)
Bramka pochodzenia PDF 2.0§6.7.3 / bazowyrequiresPdf17() zwraca false dla wszystkich przypadków PDF/A-4Zweryfikowane (testy jednostkowe)
OutputIntent + osadzony ICC§6.2.2Enterprise PdfAManager (nextpdf/pro)Tylko Premium (nie Core)
Schemat rozszerzeń XMP, tworzenie podzbiorów czcionek, zakaz szyfrowania§6 / załączniki A/BEnterprise PdfAManager (nextpdf/pro)Tylko Premium (nie Core)
Stwierdzenie zgodnościKlauzula 5Nie wykonywane przez NextPDF — veraPDFWyraźny brak pokrycia

Obsługa to nie zgodność — ta strona celowo rozdziela te dwa pojęcia. (a) NextPDF Core emituje struktury, które ISO 19005-4:2020 §6.7.3 definiuje dla identyfikacji wariantu; jest to implementacja potwierdzona przez tests/Unit/Conformance/ConformanceModePdfAVariantTest.php (test przechodzący). (b) Zgodność pliku z PDF/A-4 jest odrębnym stwierdzeniem, którego może dokonać wyłącznie walidator, zgodnie z klauzulą 5 ISO 19005-4:2020. Klauzula 5 stanowi, że właściwego stwierdzenia zgodności z wymaganiami normatywnymi dokonuje narzędzie sprawdzające. NextPDF formułuje stwierdzenie (a). NextPDF nie formułuje stwierdzenia (b). Zwaliduj za pomocą veraPDF (verapdf --flavour 4 … lub php oracle/run.php dla mechanizmu oracle — który uruchamia się tylko wtedy, gdy obecny jest plik binarny veraPDF, jest to bramka włączana opcjonalnie).

Sformułowania „PDF/A-4 compliant”, „fully conformant” i „PDF/A-4 certified” są celowo nieobecne na tej stronie. NextPDF emituje struktury istotne dla PDF/A-4; nie gwarantuje zgodnego pliku.

Cytaty są parafrazami z korpusu zgodności NextPDF. Pełne 64-znakowe skróty reference_id zapisano w nagłówku frontmatter strony oraz w docs/public/modules/core/_normative-evidence-conf.md.