Errori di rendering e I/O
Queste voci coprono le eccezioni di rendering e input/output (I/O) sollevate mentre la pipeline HTML dispone il contenuto nel layout, il resolver dei paged media assegna la geometria di pagina, lo shaper del testo elabora gli script complessi, la fase di tipografia interrompe le righe, il writer serializza un documento, il reader analizza un PDF esistente e la fase dei metadati legge un pacchetto Extensible Metadata Platform (XMP).
Due gerarchie di base compaiono di seguito, e la differenza determina quali dati
diagnostici si possono leggere dopo un catch:
NextPdfExceptionimplementaContextAwareExceptionInterface::getContext(): array. L’implementazione di base restituisce un array vuoto; una sottoclasse trasporta chiavi strutturate solo quando sovrascrivegetContext(). Le sottoclassi che non la sovrascrivono espongono comunque i propri dati tramite proprietàpublic readonly.- Diverse classi qui estendono direttamente la
RuntimeExceptiondi PHP. Non sono context-aware e non hanno un metodogetContext(); leggere invece il lorogetMessage()e qualsiasi proprietà pubblica.
Ogni voce indica la classe esatta, la condizione di trigger, le chiavi di contesto o le proprietà pubbliche che trasporta e il percorso di recupero.
Layout HTML e paged media
Sezione intitolata “Layout HTML e paged media”UnsplittableContentException
Sezione intitolata “UnsplittableContentException”- Quando viene sollevata. Il motore di layout HTML la solleva quando il
contenuto contrassegnato
break-inside: avoid(una cella di tabella il cui vincolo di interruzione èAvoid) ha un’altezza misurata che supera l’altezza utilizzabile di una singola pagina. Il motore non può soddisfare contemporaneamente il vincolo avoid-break e il confine di pagina, perciò fallisce anziché provocare silenziosamente un overflow. - Dati trasportati. Estende
NextPdfExceptionma non sovrascrivegetContext(), quindigetContext()restituisce un array vuoto. I dati diagnostici sono su proprietàpublic readonly:gridRow(int),gridCol(int),contentHeight(float, punti) epageHeight(float, punti). Il messaggio indica le coordinate della cella ed entrambe le altezze. - Recupero. Rimuovere il vincolo
break-inside: avoidsulla cella problematica, ridurre il contenuto della cella affinché stia in una pagina, oppure aumentare la dimensione di pagina o ridurne i margini così che l’altezza utilizzabile accolga il contenuto.
BudgetExceededException
Sezione intitolata “BudgetExceededException”- Quando viene sollevata. Le primitive di layout in modalità retained la
sollevano quando uno dei quattro tier di budget delle risorse definiti nella
architecture decision record ADR-020 viene violato e il chiamante ha optato per
un guasto rigido anziché per il fallback morbido. Il percorso predefinito non
solleva eccezioni:
ContainerLayout::acceptChild()restituiscefalse, il chiamante ripiega sul layout a blocchi e viene emesso un avviso. L’eccezione è riservata alla convalida al momento della configurazione e ai test che asseriscono la tupla esatta di violazione. I tier sonoper-child(uno stream di figlio catturato supera il proprio limite),per-container(il budget di conteggio dei nodi di Tier 1),per-document(il budget di passaggi di layout o profondità di annidamento) eglobal(il tetto a livello di SDK di 256 MB di picco di resident set size). - Dati trasportati. Sovrascrive
getContext(), che restituisce una forma stabile a otto chiavi consumata dalla strumentazione di application performance monitoring (APM):budgetTier,exceededValue,budgetLimit,containerType,phase,breachOrigin,captureSizeeprocessedItemCount. Le prime quattro chiavi sono il sottoinsieme originale v1.0.0 e sono sempre popolate; le ultime quattro hanno valore predefinitonullo0quando il costruttore viene chiamato senza di esse.getCausalWarningCode()mappa la tupla (tier, container-type) sulWarningCodeche il percorso di fallback morbido avrebbe emesso. - Recupero. Per una violazione di configurazione, riportare il valore
richiesto entro l’envelope documentato (ad esempio, il budget dei nodi retained
accetta da
5.000a100.000tramiteConfig::withRetainedNodeBudget()). Per una violazione di contenuto, ridurre l’annidamento dei container o il conteggio dei nodi, oppure affidarsi al fallback morbido predefinito al layout a blocchi anziché optare per la superficie a guasto rigido.
UnsupportedNamedPageException
Sezione intitolata “UnsupportedNamedPageException”- Quando viene sollevata. La fase dei paged media la solleva, fail-closed,
quando un documento dichiara una regola
@page <ident> { … }denominata (vincolata al contenuto tramite la proprietàpage: <ident>). Le pagine denominate di CSS Paged Media Level 3 §3.4 e Level 4 §3.2 — incluse le pseudo-classi:first,:left,:righte:blanke gli override denominatisize:erotate:— vengono analizzate ma nessun percorso di layout di produzione le consuma. Il motore rifiuta anziché emettere la paginazione predefinita silenziosamente errata che scartare la regola produrrebbe. - Dati trasportati. Sovrascrive
getContext(), che restituiscepage_names(elenco degli ident distinti che hanno innescato il guasto, in ordine di sorgente),has_size_override(bool),has_rotate_override(bool) ehas_pseudo_classes(bool). Gli stessi valori sono esposti sulle proprietà pubblichepageNames,hasSizeOverride,hasRotateOverrideehasPseudoClasses. - Recupero. Rimuovere le regole
@page <ident>denominate e qualsiasi bindingpage: <ident>, ed esprimere la geometria desiderata tramite la regola@page { … }non denominata supportata e le sue forme con pseudo-classe. In alternativa, agganciarsi a una release futura che introduce il pieno supporto al layout delle pagine denominate.
Tipografia e shaping del testo
Sezione intitolata “Tipografia e shaping del testo”IcuRequirementException
Sezione intitolata “IcuRequirementException”- Quando viene sollevata. La segmentazione del testo la solleva quando
necessita dell’iteratore di interruzione di riga di International Components for
Unicode (ICU) ma la policy require-ICU è attiva (
NEXTPDF_REQUIRE_ICU=1) mentre l’estensioneext-intleIntlBreakIteratornon sono disponibili. - Dati trasportati. Estende direttamente
RuntimeException, perciò non è context-aware e non hagetContext(). È un raffinamento strict dell’eccezione generica che lo stesso percorso di codice sollevava in precedenza, perciò i gestoricatch (\RuntimeException)esistenti continuano a funzionare. - Recupero. Installare e abilitare
ext-intlcosì che l’iteratore di interruzione ICU sia disponibile, oppure rimuovereNEXTPDF_REQUIRE_ICUper ripiegare sul segmentatore non-ICU dove la policy require-ICU non è obbligatoria.
ScriptShaperException
Sezione intitolata “ScriptShaperException”- Quando viene sollevata. È l’eccezione base per la service provider interface (SPI) di shaping degli script. Oggi non viene sollevata direttamente; vengono sollevati invece i sottotipi concreti. Intercettare questo tipo per gestire in un unico punto qualsiasi guasto di shaping.
- Dati trasportati. Estende direttamente
RuntimeException; non context-aware, nessungetContext(). - Recupero. Diramare sul sottotipo concreto. Vedere
NotYetImplementedExceptiondi seguito per l’unico sottotipo fornito nella release corrente.
NotYetImplementedException
Sezione intitolata “NotYetImplementedException”- Quando viene sollevata. Ogni script-shaper segnaposto la solleva dal proprio
corpo
shape()per gli script il cui shaping concreto è differito (mongolo e tibetano). Il seam della SPI di shaping è pronto a livello di architettura, ma lo shaping reale è in attesa di una fixture validata da madrelingua. Sollevare un’eccezione anziché un no-op silenzioso fa emergere a runtime un collegamento di produzione accidentale, invece di emettere testo non sottoposto a shaping in un PDF che dichiara accessibilità con tag. - Dati trasportati. Estende
ScriptShaperException(e quindiRuntimeException), perciò non è context-aware e non hagetContext(). I dati diagnostici sono sulle sue proprietàpublic readonly:bcp47LanguageTag(il tag BCP-47 del run, comemn-Mongobo-Tibt) emissingCapability(la capacità concreta che manca all’implementazione). Il messaggio include entrambi. - Recupero. Non instradare in produzione i run negli script non implementati attraverso lo shaper. Rilevare il tag di lingua a monte e ripiegare su un percorso di rendering diverso oppure agganciarsi a una release futura che introduce lo shaping per lo script interessato.
Profili di output del writer e cifratura
Sezione intitolata “Profili di output del writer e cifratura”Pdf14FeatureRejectedException
Sezione intitolata “Pdf14FeatureRejectedException”- Quando viene sollevata. Il writer la solleva quando un documento contiene una funzionalità vietata sotto il profilo di output PDF 1.4 (ISO 19005-1:2005 / PDF/A-1), che proibisce i costrutti introdotti in versioni PDF successive.
- Dati trasportati. Estende
NextPdfExceptionma non sovrascrivegetContext(), quindigetContext()restituisce un array vuoto. I dati diagnostici sono sulle sue proprietàpublic readonly:feature(il nome della funzionalità rifiutata),reason(perché è vietata) eisoClause(il riferimento alla clausola ISO). Il messaggio combina tutti e tre. - Recupero. Rimuovere o sostituire la funzionalità rifiutata con un equivalente compatibile con PDF 1.4, oppure puntare a un profilo di output superiore che la consente.
Pdf20FeatureRejectedException
Sezione intitolata “Pdf20FeatureRejectedException”- Quando viene sollevata. Il writer la solleva quando un documento contiene una funzionalità vietata sotto il profilo di output PDF 2.0 strict. ISO 32000-2:2020 depreca costrutti che PDF 1.7 ancora consentiva — in particolare i font Type 1 Standard 14 (§9.6.2), che devono essere incorporati in un documento PDF 2.0 conforme.
- Dati trasportati. Stessa forma di
Pdf14FeatureRejectedException: estendeNextPdfException, non sovrascrivegetContext()(restituisce un array vuoto) ed esponefeature,reasoneisoClausecome proprietàpublic readonly. - Recupero. Rimediare alla funzionalità rifiutata — ad esempio, incorporare i
font base 14 — oppure usare la via di uscita documentata dove esiste (per i font
base 14 non incorporati,
Document::allowNonEmbeddedBase14()).
PublicKeyEncryptionUnsupportedException
Sezione intitolata “PublicKeyEncryptionUnsupportedException”- Quando viene sollevata.
PdfWriter::build()la solleva al punto di ingresso quando l’encryptionModedel documento èpubkey(un elenco di destinatari a chiave pubblica) prima che il dispatch lato writer di cifratura del corpo dello stream a chiave pubblica sia collegato. Rifiutare in anticipo impedisce di emettere silenziosamente un PDF non cifrato che il chiamante credeva cifrato. - Dati trasportati. Estende direttamente
RuntimeException, perciò non è context-aware e non hagetContext(). È un raffinamento strict dell’eccezione generica che lo stesso sito sollevava in precedenza, perciò i gestoricatch (\RuntimeException)esistenti continuano a funzionare. - Recupero. Usare una modalità di cifratura supportata (cifratura basata su password) anziché l’elenco di destinatari a chiave pubblica, oppure agganciarsi a una release che introduce il supporto alla cifratura a chiave pubblica. Non considerare l’output come cifrato quando questa viene sollevata.
Input del reader e dei metadati
Sezione intitolata “Input del reader e dei metadati”UnsupportedPdfStructureException
Sezione intitolata “UnsupportedPdfStructureException”- Quando viene sollevata. Il reader del grafo di oggetti la solleva,
fail-closed, quando un PDF di input ricade fuori dal suo envelope supportato. Il
reader supporta le tabelle di cross-reference classiche (ISO 32000-2:2020
§7.5.4), gli stream di cross-reference (§7.5.8), gli oggetti compressi in object
stream (§7.5.7), le catene
/Prevmulti-revisione (§7.5.6) e i file a riferimento ibrido tramite/XRefStm(§7.5.8.4). Qualsiasi cosa fuori da quel envelope fa emergere questa eccezione anziché un parsing parziale o indovinato. I costruttori denominati mappano ai casi di motivo:encrypted(),damagedCrossReference(),cyclicReferenceChain(),nonConformantObjectStream(),irresolvableObjectCollision(),truncatedFile()ecrossReferenceOffsetOutOfBounds(). - Dati trasportati. Estende direttamente
RuntimeException, perciò non è context-aware e non hagetContext(). Espone una proprietàpublic readonlyreasondi tipoUnsupportedPdfStructureReason(un enum), così che i chiamanti diramino sulla categoria precisa senza analizzare il messaggio; una stringadetailopzionale e un throwablepreviouspossono aggiungere contesto limitato e non sensibile. Il messaggio predefinito è il riepilogo non-leaking del motivo. - Recupero. Diramare su
reason. PerEncryptedDocument, eseguire un passaggio di decifratura prima della lettura, poiché la decifratura è fuori dall’ambito del reader. PerDamagedCrossReference,TruncatedFileoCrossReferenceOffsetOutOfBounds, considerare il file come malformato o incompleto e riacquisire o riparare l’origine. PerCyclicReferenceChain,NonConformantObjectStreamoIrresolvableObjectCollision, l’input viola il modello strutturale e non può essere letto così com’è.
PacketTooLargeException
Sezione intitolata “PacketTooLargeException”- Quando viene sollevata. Il reader dei metadati XMP in streaming la solleva quando un pacchetto XMP incorporato supera il tetto di byte configurato. È una guardia difensiva contro input in stile entity-expansion e quadratic-blowup (un tetto di picco di 128 MB contro XMP incorporato su scala di gigabyte).
- Dati trasportati. Estende
NextPdfExceptionma non sovrascrivegetContext(), quindigetContext()restituisce un array vuoto. I dati diagnostici sono sulle sue proprietàpublic readonly:byteCount(il conteggio di byte osservato) ecap(il limite configurato in byte). Il messaggio riporta entrambi. - Recupero. Rifiutare o saltare i metadati sovradimensionati come malevoli o malformati. Se un documento legittimo necessita davvero di un pacchetto più grande, innalzare deliberatamente il limite configurato, valutando il rischio di esaurimento della memoria che la guardia esiste per prevenire.
Vedere anche
Sezione intitolata “Vedere anche”- Indice del riferimento degli errori
- Risoluzione dei problemi di font e tagging — per i sintomi di
NotYetImplementedException,ScriptShaperExceptioneIcuRequirementException. - Risoluzione dei problemi di convalida PDF/A e PDF/UA — per i sintomi di
Pdf14FeatureRejectedExceptionePdf20FeatureRejectedException. - Risoluzione dei problemi di cifratura e permessi — per
PublicKeyEncryptionUnsupportedExceptione il motivoEncryptedDocumentdel reader.