Błędy renderowania i wejścia/wyjścia
Te wpisy obejmują wyjątki renderowania i wejścia/wyjścia (I/O) zgłaszane, gdy potok HTML rozmieszcza treść, resolver paged media przydziela geometrię stron, kształtowacz tekstu przetwarza złożone pisma, etap typografii dzieli wiersze, zapisywacz serializuje dokument, czytnik parsuje istniejący PDF, a etap metadanych odczytuje pakiet Extensible Metadata Platform (XMP).
Poniżej pojawiają się dwie hierarchie bazowe, a różnica między nimi rządzi tym, jakie dane
diagnostyczne można odczytać po catch:
NextPdfExceptionimplementujeContextAwareExceptionInterface::getContext(): array. Implementacja bazowa zwraca pustą tablicę; podklasa niesie ustrukturyzowane klucze tylko wtedy, gdy nadpisujegetContext(). Podklasy, które jej nie nadpisują, nadal udostępniają swoje dane przez właściwościpublic readonly.- Kilka klas tutaj rozszerza
RuntimeExceptionPHP bezpośrednio. Nie są one świadome kontekstu i nie mają metodygetContext(); odczytaj ichgetMessage()oraz wszelkie właściwości publiczne.
Każdy wpis podaje dokładną klasę, warunek wyzwalający, klucze kontekstu lub właściwości publiczne, które niesie, oraz ścieżkę naprawczą.
Układ HTML i paged media
Dział zatytułowany „Układ HTML i paged media”UnsplittableContentException
Dział zatytułowany „UnsplittableContentException”- Kiedy jest zgłaszany. Silnik układu HTML zgłasza to, gdy treść oznaczona
break-inside: avoid(komórka tabeli, której ograniczenie podziału toAvoid) ma zmierzoną wysokość przekraczającą użyteczną wysokość pojedynczej strony. Silnik nie może spełnić jednocześnie ograniczenia unikania podziału i granicy strony, więc zgłasza błąd zamiast po cichu przepełnić. - Niesione dane. Rozszerza
NextPdfException, ale nie nadpisujegetContext(), więcgetContext()zwraca pustą tablicę. Dane diagnostyczne znajdują się we właściwościachpublic readonly:gridRow(int),gridCol(int),contentHeight(float, punkty) orazpageHeight(float, punkty). Komunikat podaje współrzędne komórki oraz obie wysokości. - Naprawa. Usuń ograniczenie
break-inside: avoidna problematycznej komórce, zmniejsz treść komórki, aby zmieściła się na jednej stronie, albo zwiększ rozmiar strony lub zmniejsz jej marginesy, aby użyteczna wysokość pomieściła treść.
BudgetExceededException
Dział zatytułowany „BudgetExceededException”- Kiedy jest zgłaszany. Prymitywy układu trybu retained zgłaszają to, gdy jeden z
czterech poziomów budżetu zasobów zdefiniowanych w decyzji architektonicznej
ADR-020 zostanie naruszony, a wywołujący zdecydował się na twardą awarię, a nie na
miękki wariant zapasowy. Domyślna ścieżka nie zgłasza wyjątku:
ContainerLayout::acceptChild()zwracafalse, wywołujący cofa się do układu blokowego, a ostrzeżenie zostaje wyemitowane. Wyjątek jest zarezerwowany dla walidacji w czasie konfiguracji oraz dla testów, które asertują dokładną krotkę naruszenia. Poziomy toper-child(przechwycony strumień podrzędny przekracza swój pułap),per-container(budżet liczby węzłów Tier 1),per-document(budżet przebiegu układu lub głębokości zagnieżdżenia) orazglobal(pułap szczytowego rezydentnego zbioru pamięci 256 MB obejmujący cały SDK). - Niesione dane. Nadpisuje
getContext(), który zwraca stabilny ośmioklucz kształt spożytkowany przez narzędzia monitorowania wydajności aplikacji (APM):budgetTier,exceededValue,budgetLimit,containerType,phase,breachOrigin,captureSizeorazprocessedItemCount. Pierwsze cztery klucze to oryginalny podzbiór z v1.0.0 i są zawsze wypełnione; ostatnie cztery domyślnie przyjmująnulllub0, gdy konstruktor zostanie wywołany bez nich.getCausalWarningCode()odwzorowuje krotkę (poziom, typ kontenera) naWarningCode, który wyemitowałaby ścieżka miękkiego wariantu zapasowego. - Naprawa. W przypadku naruszenia konfiguracji obniż żądaną wartość z powrotem do
udokumentowanej obwiedni (na przykład budżet węzłów retained akceptuje 5 000
do 100 000 przez
Config::withRetainedNodeBudget()). W przypadku naruszenia treści zmniejsz zagnieżdżenie kontenerów lub liczbę węzłów albo zdaj się na domyślny miękki wariant zapasowy do układu blokowego zamiast decydować się na powierzchnię twardej awarii.
UnsupportedNamedPageException
Dział zatytułowany „UnsupportedNamedPageException”- Kiedy jest zgłaszany. Etap paged media zgłasza to, w trybie fail-closed, gdy
dokument deklaruje nazwaną regułę
@page <ident> { … }(powiązaną z treścią przez właściwośćpage: <ident>). Nazwane strony z CSS Paged Media Level 3 §3.4 oraz Level 4 §3.2 — w tym pseudoklasy:first,:left,:righti:blankoraz nazwane przesłonięciasize:irotate:— są parsowane, ale żadna produkcyjna ścieżka układu ich nie spożytkowuje. Silnik odmawia, zamiast wyemitować po cichu niepoprawną domyślną paginację, którą wytworzyłoby odrzucenie reguły. - Niesione dane. Nadpisuje
getContext(), który zwracapage_names(listę odrębnych identyfikatorów, które wyzwoliły awarię, w kolejności źródłowej),has_size_override(bool),has_rotate_override(bool) orazhas_pseudo_classes(bool). Te same wartości są udostępniane we właściwościach publicznychpageNames,hasSizeOverride,hasRotateOverrideorazhasPseudoClasses. - Naprawa. Usuń nazwane reguły
@page <ident>oraz wszelkie powiązaniapage: <ident>i wyraź zamierzoną geometrię przez obsługiwaną nienazwaną regułę@page { … }i jej formy pseudoklas. Alternatywnie przypnij się do przyszłego wydania, które dostarczy pełną obsługę układu nazwanych stron.
Typografia i kształtowanie tekstu
Dział zatytułowany „Typografia i kształtowanie tekstu”IcuRequirementException
Dział zatytułowany „IcuRequirementException”- Kiedy jest zgłaszany. Segmentacja tekstu zgłasza to, gdy potrzebuje
iteratora dzielenia wierszy International Components for Unicode (ICU), ale
polityka require-ICU jest aktywna (
NEXTPDF_REQUIRE_ICU=1), podczas gdy rozszerzenieext-intlorazIntlBreakIteratorsą niedostępne. - Niesione dane. Rozszerza
RuntimeExceptionbezpośrednio, więc nie jest świadome kontekstu i nie magetContext(). To ścisłe uściślenie generycznego wyjątku, który ta sama ścieżka kodu zgłaszała wcześniej, więc istniejące programy obsługicatch (\RuntimeException)nadal działają. - Naprawa. Zainstaluj i włącz
ext-intl, aby iterator dzielenia ICU był dostępny, albo usuńNEXTPDF_REQUIRE_ICU, aby cofnąć się do segmentatora bez ICU tam, gdzie polityka require-ICU nie jest obowiązkowa.
ScriptShaperException
Dział zatytułowany „ScriptShaperException”- Kiedy jest zgłaszany. To wyjątek bazowy dla interfejsu dostawcy usług kształtowania pisma (SPI). Obecnie nie jest zgłaszany bezpośrednio; zamiast niego zgłaszane są konkretne podtypy. Przechwyć ten typ, aby obsłużyć każdą awarię kształtowania w jednym miejscu.
- Niesione dane. Rozszerza
RuntimeExceptionbezpośrednio; nie jest świadome kontekstu, brakgetContext(). - Naprawa. Rozgałęziaj logikę na konkretny podtyp. Zobacz
NotYetImplementedExceptionponiżej w celu poznania jedynego podtypu dostarczanego w bieżącym wydaniu.
NotYetImplementedException
Dział zatytułowany „NotYetImplementedException”- Kiedy jest zgłaszany. Każdy zastępczy kształtowacz pisma zgłasza to z ciała swojej metody
shape()dla pism, których konkretne kształtowanie jest odroczone (mongolskie i tybetańskie). Szew SPI kształtowania jest gotowy architektonicznie, ale rzeczywiste kształtowanie czeka na zwalidowaną przez rodzimego użytkownika fiksturę. Zgłoszenie wyjątku, a nie ciche działanie bez efektu, ujawnia przypadkowe produkcyjne podłączenie w czasie wykonania, zamiast wyemitować nieukształtowany tekst do PDF, który deklaruje otagowaną dostępność. - Niesione dane. Rozszerza
ScriptShaperException(a zatemRuntimeException), więc nie jest świadome kontekstu i nie magetContext(). Dane diagnostyczne znajdują się w jego właściwościachpublic readonly:bcp47LanguageTag(znacznik BCP-47 przebiegu, taki jakmn-Monglubbo-Tibt) orazmissingCapability(konkretna możliwość, której brakuje implementacji). Komunikat zawiera obie. - Naprawa. Nie kieruj przebiegów w niezaimplementowanych pismach przez kształtowacz w produkcji. Wykryj znacznik języka wcześniej i albo cofnij się do innej ścieżki renderowania, albo przypnij się do przyszłego wydania, które dostarczy kształtowanie dla danego pisma.
Profile wyjściowe zapisywacza i szyfrowanie
Dział zatytułowany „Profile wyjściowe zapisywacza i szyfrowanie”Pdf14FeatureRejectedException
Dział zatytułowany „Pdf14FeatureRejectedException”- Kiedy jest zgłaszany. Zapisywacz zgłasza to, gdy dokument zawiera funkcję zabronioną w profilu wyjściowym PDF 1.4 (ISO 19005-1:2005 / PDF/A-1), który zabrania konstrukcji wprowadzonych w późniejszych wersjach PDF.
- Niesione dane. Rozszerza
NextPdfException, ale nie nadpisujegetContext(), więcgetContext()zwraca pustą tablicę. Dane diagnostyczne znajdują się w jego właściwościachpublic readonly:feature(nazwa odrzuconej funkcji),reason(dlaczego jest zabroniona) orazisoClause(odwołanie do klauzuli ISO). Komunikat łączy wszystkie trzy. - Naprawa. Usuń lub zastąp odrzuconą funkcję odpowiednikiem zgodnym z PDF 1.4 albo wybierz wyższy profil wyjściowy, który dopuszcza tę funkcję.
Pdf20FeatureRejectedException
Dział zatytułowany „Pdf20FeatureRejectedException”- Kiedy jest zgłaszany. Zapisywacz zgłasza to, gdy dokument zawiera funkcję zabronioną w ścisłym profilu wyjściowym PDF 2.0. ISO 32000-2:2020 wycofuje konstrukcje, które PDF 1.7 nadal dopuszczał — przede wszystkim czcionki Standard 14 Type 1 (§9.6.2), które w zgodnym dokumencie PDF 2.0 muszą być osadzone.
- Niesione dane. Ten sam kształt co
Pdf14FeatureRejectedException: rozszerzaNextPdfException, nie nadpisujegetContext()(zwraca pustą tablicę) i udostępniafeature,reasonorazisoClausejako właściwościpublic readonly. - Naprawa. Napraw odrzuconą funkcję — na przykład osadź czcionki base 14 — albo
skorzystaj z udokumentowanej furtki tam, gdzie istnieje (dla nieosadzonych czcionek
base 14:
Document::allowNonEmbeddedBase14()).
PublicKeyEncryptionUnsupportedException
Dział zatytułowany „PublicKeyEncryptionUnsupportedException”- Kiedy jest zgłaszany.
PdfWriter::build()zgłasza to w punkcie wejścia, gdyencryptionModedokumentu topubkey(lista odbiorców klucza publicznego), zanim dyspozytor szyfrowania ciała strumienia kluczem publicznym po stronie zapisywacza zostanie podłączony. Odmowa z góry zapobiega cichemu wyemitowaniu niezaszyfrowanego PDF, który wywołujący uważał za zaszyfrowany. - Niesione dane. Rozszerza
RuntimeExceptionbezpośrednio, więc nie jest świadome kontekstu i nie magetContext(). To ścisłe uściślenie generycznego wyjątku, który to samo miejsce zgłaszało wcześniej, więc istniejące programy obsługicatch (\RuntimeException)nadal działają. - Naprawa. Użyj obsługiwanego trybu szyfrowania (szyfrowanie oparte na haśle) zamiast listy odbiorców klucza publicznego albo przypnij się do wydania, które dostarczy obsługę szyfrowania kluczem publicznym. Nie traktuj wyjścia jako zaszyfrowanego, gdy to zostanie zgłoszone.
Dane wejściowe czytnika i metadanych
Dział zatytułowany „Dane wejściowe czytnika i metadanych”UnsupportedPdfStructureException
Dział zatytułowany „UnsupportedPdfStructureException”- Kiedy jest zgłaszany. Czytnik grafu obiektów zgłasza to, w trybie fail-closed, gdy
wejściowy PDF wykracza poza obsługiwaną obwiednię. Czytnik obsługuje klasyczne
tabele odsyłaczy (ISO 32000-2:2020 §7.5.4), strumienie odsyłaczy
(§7.5.8), obiekty skompresowane w strumieniach obiektów (§7.5.7), wielorewizyjne łańcuchy
/Prev(§7.5.6) oraz pliki o hybrydowych odsyłaczach przez/XRefStm(§7.5.8.4). Wszystko poza tą obwiednią ujawnia ten wyjątek, a nie częściowy lub zgadywany parse. Nazwane konstruktory odwzorowują się na przypadki przyczyn:encrypted(),damagedCrossReference(),cyclicReferenceChain(),nonConformantObjectStream(),irresolvableObjectCollision(),truncatedFile()orazcrossReferenceOffsetOutOfBounds(). - Niesione dane. Rozszerza
RuntimeExceptionbezpośrednio, więc nie jest świadome kontekstu i nie magetContext(). Udostępnia właściwośćpublic readonlyreasontypuUnsupportedPdfStructureReason(wyliczenie), aby wywołujący rozgałęziali logikę na precyzyjnej kategorii bez parsowania komunikatu; opcjonalny napisdetailorazpreviousthrowable mogą dodać ograniczony, niewrażliwy kontekst. Domyślny komunikat to niewyciekające podsumowanie przyczyny. - Naprawa. Rozgałęziaj logikę na
reason. DlaEncryptedDocumentwykonaj krok odszyfrowania przed odczytem, ponieważ odszyfrowywanie jest poza zakresem czytnika. DlaDamagedCrossReference,TruncatedFilelubCrossReferenceOffsetOutOfBoundspotraktuj plik jako źle sformowany lub niekompletny i pobierz ponownie lub napraw źródło. DlaCyclicReferenceChain,NonConformantObjectStreamlubIrresolvableObjectCollisiondane wejściowe naruszają model strukturalny i nie da się ich odczytać w obecnej postaci.
PacketTooLargeException
Dział zatytułowany „PacketTooLargeException”- Kiedy jest zgłaszany. Strumieniowy czytnik metadanych XMP zgłasza to, gdy osadzony pakiet XMP przekracza skonfigurowany pułap bajtów. To defensywne zabezpieczenie przed danymi wejściowymi typu rozszerzania encji i kwadratowego rozrostu (pułap szczytowy 128 MB wobec osadzonego XMP o skali gigabajtów).
- Niesione dane. Rozszerza
NextPdfException, ale nie nadpisujegetContext(), więcgetContext()zwraca pustą tablicę. Dane diagnostyczne znajdują się w jego właściwościachpublic readonly:byteCount(zaobserwowana liczba bajtów) orazcap(skonfigurowany pułap w bajtach). Komunikat raportuje oba. - Naprawa. Odrzuć lub pomiń przewymiarowane metadane jako złośliwe lub źle sformowane. Jeśli zasadny dokument faktycznie potrzebuje większego pakietu, podnieś skonfigurowany pułap z rozmysłem, ważąc ryzyko wyczerpania pamięci, któremu zabezpieczenie ma zapobiegać.
Zobacz także
Dział zatytułowany „Zobacz także”- Indeks dokumentacji błędów
- Rozwiązywanie problemów z czcionkami i tagowaniem — w przypadku objawów
NotYetImplementedException,ScriptShaperExceptionorazIcuRequirementException. - Rozwiązywanie problemów z walidacją PDF/A i PDF/UA — w przypadku objawów
Pdf14FeatureRejectedExceptionorazPdf20FeatureRejectedException. - Rozwiązywanie problemów z szyfrowaniem i uprawnieniami — w przypadku
PublicKeyEncryptionUnsupportedExceptionoraz przyczynyEncryptedDocumentczytnika.