Przejdź do głównej zawartości

Rozwiązywanie problemów z błędami walidacji PDF/A i PDF/UA

Te wpisy opisują niepowodzenia zgłaszane przez silnik, gdy dokument ma pozostać w profilu Portable Document Format/Archive (PDF/A) lub Portable Document Format/Universal Accessibility (PDF/UA). Numery klauzul podane poniżej pochodzą z kodu źródłowego silnika oraz komunikatów wyjątków. Ta strona je parafrazuje. Silnik zgłasza wykryte naruszenia profilu; nie poświadcza zgodności dokumentu. Aby uzyskać miarodajny werdykt dotyczący zgodności, użyj zewnętrznego walidatora z własnym zestawem reguł.

  • Objaw. NextPDF\Security\Exception\IncompatiblePdfAModeException z komunikatem informującym, że operacja szyfrowania jest zabroniona w trybie PDF/A.
  • Prawdopodobna przyczyna. Potok włączył tryb PDF/A i zażądał szyfrowania. Silnik powołuje się na International Organization for Standardization (ISO) 19005-{1,2,3,4} §6.1.3: klucz Encrypt nie może występować w zwiastunie (trailer) pliku PDF/A. Silnik bezwzględnie odrzuca tę kombinację, niezależnie od kolejności wywołań.
  • Dowody / diagnoza. getContext() zwraca pdfa_mode oraz encryption_operation. Test ścieżki niepowodzenia tests/SecurityScenarios/PdfAEncryptionRefusalTest.php potwierdza, że odrzucenie następuje niezależnie od tego, czy PDF/A zostanie włączone przed wywołaniem szyfrowania, czy po nim.
  • Rozwiązanie.
    1. Zdecyduj, czego potrzebuje dokument: zgodności archiwalnej czy szyfrowania.
    2. W przypadku dokumentu archiwalnego usuń wywołanie szyfrowania.
    3. W przypadku dokumentu szyfrowanego usuń wywołanie włączające PDF/A.
    4. Uruchom potok ponownie.
  • Powiązane. Szyfrowanie i uprawnienia.
  • Objaw. Pdf14FeatureRejectedException podczas wczytywania obrazu, z komunikatem wskazującym /JPXDecode lub /JBIG2Decode oraz klauzulę ISO 19005-1:2005 §6.1.13.
  • Prawdopodobna przyczyna. Podczas kompilacji PDF/A-1 wczytano obraz korzystający z filtra wprowadzonego po PDF 1.4. PDF/A-1 jest ukierunkowany na zestaw funkcji PDF 1.4, więc PdfA1FeatureGuard odrzuca Joint Photographic Experts Group (JPEG) 2000 (/JPXDecode) oraz JBIG2 (/JBIG2Decode).
  • Dowody / diagnoza. src/Writer/PdfA1FeatureGuard.php zawiera listę zabronionych filtrów i zgłasza przywołaną klauzulę. PdfA1FeatureGuard odrzuca te filtry wyłącznie w profilu PDF/A-1; profile PDF/A-2, PDF/A-3 oraz PDF 2.0 zezwalają na nie.
  • Rozwiązanie.
    1. Przekoduj obraz źródłowy bez JPEG 2000 ani JBIG2. Na przykład zapisz go ponownie jako bazowy JPEG lub obraz skompresowany metodą Flate.
    2. Alternatywnie wybierz PDF/A-2 lub PDF/A-3 jako profil docelowy, ponieważ zezwalają na te filtry.
    3. Uruchom kompilację ponownie.
  • Powiązane. Materiały referencyjne dotyczące zgodności.
  • Objaw. Kompilacja PDF/A kończy się niepowodzeniem na etapie walidacji czcionek lub zewnętrzny walidator zgłasza nieosadzoną czcionkę.
  • Prawdopodobna przyczyna. Glif został narysowany czcionką, której program nie został osadzony. Kontrakt menedżera PDF/A stanowi, że każda czcionka musi być osadzona i że żadna czcionka standard-14 nie jest dozwolona bez osadzenia.
  • Dowody / diagnoza. src/Contracts/PdfAManagerInterface.php deklaruje validateFont(string $fontName, bool $isEmbedded, array $cmapForward) i dokumentuje regułę: każda czcionka musi być osadzona, a żadna czcionka standard 14 nie jest dozwolona bez osadzenia. Za właściwe egzekwowanie tej reguły odpowiada nextpdf/pro.
  • Rozwiązanie.
    1. Zidentyfikuj czcionkę zgłoszoną jako nieosadzona.
    2. Skonfiguruj tę czcionkę z plikiem programu nadającym się do osadzenia, zamiast polegać na wbudowanym kroju standard-14.
    3. Aby zrozumieć działanie podstawienia Base 14, przeczytaj wpis o czcionkach i tagowaniu.
    4. Uruchom kompilację ponownie i przeprowadź walidację jeszcze raz.
  • Powiązane. Czcionki i tagowanie.

Wpis: JavaScript jest obecny i walidacja PDF/A kończy się niepowodzeniem

Dział zatytułowany „Wpis: JavaScript jest obecny i walidacja PDF/A kończy się niepowodzeniem”
  • Objaw. Kompilacja PDF/A kończy się niepowodzeniem na etapie walidacji JavaScript lub zewnętrzny walidator zgłasza akcję JavaScript.
  • Prawdopodobna przyczyna. Dokument lub pole formularza zawiera akcję JavaScript. Kontrakt menedżera PDF/A powołuje się na ISO 19005-4:2020 §6.7.1, która zabrania akcji JavaScript.
  • Dowody / diagnoza. Metody PdfAManagerInterface::validateNoJavaScript() oraz validateNoJavaScriptActions() odwołują się do §6.7.1 w swoich docblockach.
  • Rozwiązanie.
    1. Usuń akcję JavaScript z dokumentu lub pola formularza.
    2. Jeśli akcja jest niezbędna do działania, dokument nie może być w formacie PDF/A. Do takiego zastosowania utwórz wariant inny niż PDF/A.
    3. Uruchom kompilację ponownie i przeprowadź walidację jeszcze raz.
  • Powiązane. Materiały referencyjne dotyczące zgodności.

Wpis: otagowany dokument wyjściowy nie deklaruje PDF/UA-2

Dział zatytułowany „Wpis: otagowany dokument wyjściowy nie deklaruje PDF/UA-2”
  • Objaw. Dokument zbudowany z włączonym tagowaniem nie jest rozpoznawany jako PDF/UA-2 lub brakuje w nim deklaracji PDF/UA-2.
  • Prawdopodobna przyczyna. Drzewo struktury jest puste. Silnik nie deklaruje PDF/UA-2 w przypadku dokumentu bez otagowanej struktury, ponieważ puste drzewo struktury nie spełnia wymagań profilu.
  • Dowody / diagnoza. Test ścieżki niepowodzenia tests/Integration/Accessibility/EmptyTaggedPdfDoesNotAdvertisePdfUa2Test.php potwierdza, że pusty otagowany dokument nie deklaruje PDF/UA-2. Jest to udokumentowane zachowanie silnika, a nie wada.
  • Rozwiązanie.
    1. Potwierdź, że treść jest emitowana przez ścieżkę tagowania, tak aby drzewo struktury było wypełnione, a nie pozostawało puste.
    2. Sprawdź, czy sekwencje oznaczonej treści (marked-content) są odwzorowane na elementy struktury.
    3. Uruchom kompilację ponownie i sprawdź jeszcze raz status PDF/UA-2.
  • Powiązane. Czcionki i tagowanie.

Wpis: walidacja PDF/UA-2 kończy się niepowodzeniem z powodu brakującego lub nieprawidłowego języka

Dział zatytułowany „Wpis: walidacja PDF/UA-2 kończy się niepowodzeniem z powodu brakującego lub nieprawidłowego języka”
  • Objaw. Sprawdzenie PDF/UA-2 kończy się niepowodzeniem, ponieważ wpis języka jest nieobecny lub nie jest prawidłowym tagiem.
  • Prawdopodobna przyczyna. W dokumencie lub elemencie struktury brakuje prawidłowego języka. PDF/UA-2 wymaga deklaracji języka naturalnego; brakująca lub nieprawidłowo sformułowana wartość Lang nie przechodzi rygorystycznego sprawdzenia.
  • Dowody / diagnoza. Test ścieżki niepowodzenia tests/Unit/Conformance/PdfUa2Section844LangStrictTest.php sprawdza rygorystyczny wymóg dotyczący języka. Tagi języka są walidowane przez src/Accessibility/Bcp47Validator.php; nieprawidłowy tag zgłasza src/Accessibility/InvalidBcp47TagException.php.
  • Rozwiązanie.
    1. Ustaw język na poziomie dokumentu w postaci prawidłowego tagu Best Current Practice (BCP) 47, na przykład en-US lub zh-Hant-TW.
    2. Jeśli fragment jest w innym języku, ustaw język na danym elemencie struktury.
    3. Uruchom kompilację ponownie i przeprowadź walidację jeszcze raz.
  • Powiązane. Czcionki i tagowanie.
  • Opisane tutaj przypadki odrzucenia PDF/A i PDF/UA są generowane wewnątrz silnika. Są niezależne od werdyktu zewnętrznego walidatora i go nie zastępują. Aby uzyskać miarodajny wynik, uruchom walidator, taki jak veraPDF.
  • Konkretny komponent zapisujący obiekty wymagane przez PDF/A (strumień metadanych Extensible Metadata Platform (XMP), zamiar wyjściowy (output intent) z profilem International Color Consortium (ICC)) jest rozwiązywany w czasie wykonywania z nextpdf/pro. Gdy zainstalowany jest tylko pakiet core, obiekty te nie są emitowane; kompilacja oparta wyłącznie na pakiecie core nie jest kompletnym generatorem PDF/A.
  • Odrzucenie szyfrowania jest bezwzględne i niezależne od kolejności; włączenie PDF/A po wywołaniu szyfrowania nadal kończy się odrzuceniem.

Słownik: zamiar wyjściowy (output intent) · drzewo struktury