Ga naar inhoud
getnextpdf.com

Rendering- en I/O-fouten

Deze vermeldingen behandelen de rendering- en input/output (I/O)-uitzonderingen die worden opgeworpen terwijl de HTML-pipeline inhoud lay-out, de paged-media-resolver paginageometrie toewijst, de tekstshaper complexe scripts verwerkt, de typografiefase regels afbreekt, de writer een document serialiseert, de reader een bestaande PDF parset, en de metadatafase een Extensible Metadata Platform (XMP)-pakket leest.

Twee basishiërarchieën verschijnen hieronder, en het verschil bepaalt welke diagnostische data je kunt lezen na een catch:

  • NextPdfException implementeert ContextAwareExceptionInterface::getContext(): array. De basis- implementatie geeft een lege array terug; een subklasse draagt gestructureerde sleutels alleen wanneer hij getContext() overschrijft. Subklassen die hem niet overschrijven stellen hun data nog steeds beschikbaar via public readonly properties.
  • Verschillende klassen hier breiden PHP’s RuntimeException rechtstreeks uit. Zij zijn niet context-bewust en hebben geen getContext()-methode; lees in plaats daarvan hun getMessage() en eventuele publieke properties.

Elke vermelding noemt de exacte klasse, de triggervoorwaarde, de contextsleutels of publieke properties die hij meedraagt, en het herstelpad.

  • Wanneer hij wordt opgeworpen. De HTML-lay-out-engine werpt deze op wanneer inhoud gemarkeerd met break-inside: avoid (een tabelcel waarvan de break-beperking Avoid is) een gemeten hoogte heeft die de bruikbare hoogte van één pagina overschrijdt. De engine kan niet voldoen aan zowel de avoid-break-beperking als de paginagrens, dus faalt hij in plaats van stilletjes te overflowen.
  • Meegedragen data. Breidt NextPdfException uit maar overschrijft getContext() niet, dus geeft getContext() een lege array terug. De diagnostische data staat op public readonly properties: gridRow (int), gridCol (int), contentHeight (float, punten), en pageHeight (float, punten). Het bericht noemt de celcoördinaten en beide hoogtes.
  • Herstel. Verwijder de break-inside: avoid-beperking op de overtredende cel, verminder de inhoud van de cel zodat hij op één pagina past, of vergroot de pagina- grootte of verklein de marges zodat de bruikbare hoogte de inhoud accommodeert.
  • Wanneer hij wordt opgeworpen. Retained-modus-lay-out-primitieven werpen deze op wanneer een van de vier resource-budget-tiers gedefinieerd in architecture decision record ADR-020 wordt overschreden en de aanroeper koos voor een harde storing in plaats van de zachte fallback. Het standaardpad werpt niet op: ContainerLayout::acceptChild() geeft false terug, de aanroeper valt terug op block layout, en een waarschuwing wordt afgegeven. De uitzondering is gereserveerd voor configuratietijd-validatie en voor tests die de exacte breach-tuple asserteren. De tiers zijn per-child (een vastgelegde child-stream overschrijdt zijn cap), per-container (het Tier 1 node-count-budget), per-document (het lay-out-pass- of nestingsdiepte-budget), en global (het SDK-brede 256 MB-peak-resident-set-size-plafond).
  • Meegedragen data. Overschrijft getContext(), die een stabiele acht-sleutel- vorm teruggeeft die wordt geconsumeerd door application performance monitoring (APM)-tooling: budgetTier, exceededValue, budgetLimit, containerType, phase, breachOrigin, captureSize, en processedItemCount. De eerste vier sleutels zijn de oorspronkelijke v1.0.0-subset en zijn altijd gevuld; de laatste vier vallen standaard terug op null of 0 wanneer de constructor zonder hen wordt aangeroepen. getCausalWarningCode() mapt de (tier, container-type)-tuple naar de WarningCode die het zachte-fallback-pad zou hebben afgegeven.
  • Herstel. Voor een configuratie-breach, verlaag de gevraagde waarde terug binnen de gedocumenteerde envelope (bijvoorbeeld, het retained-node-budget accepteert 5.000 tot 100.000 via Config::withRetainedNodeBudget()). Voor een content-breach, verminder de container-nesting of het node-count, of vertrouw op de standaard zachte-fallback naar block layout in plaats van te kiezen voor het harde-storingsoppervlak.
  • Wanneer hij wordt opgeworpen. De paged-media-fase werpt deze op, fail-closed, wanneer een document een benoemde @page <ident> { … }-regel declareert (gebonden aan inhoud via de page: <ident>-property). Named pages uit CSS Paged Media Level 3 §3.4 en Level 4 §3.2 — inclusief de pseudo-classes :first, :left, :right en :blank en benoemde size:- en rotate:-overrides — worden geparset maar geen productie-lay-out-pad consumeert ze. De engine weigert in plaats van de stilletjes-incorrecte standaardpaginering uit te voeren die het weggooien van de regel zou produceren.
  • Meegedragen data. Overschrijft getContext(), die page_names (lijst van de distincte idents die de storing triggerden, in bronvolgorde), has_size_override (bool), has_rotate_override (bool) en has_pseudo_classes (bool) teruggeeft. Dezelfde waarden zijn beschikbaar op de publieke properties pageNames, hasSizeOverride, hasRotateOverride en hasPseudoClasses.
  • Herstel. Verwijder de benoemde @page <ident>-regels en eventuele page: <ident>- bindings, en druk de bedoelde geometrie uit via de ondersteunde naamloze @page { … }-regel en zijn pseudo-class-vormen. Als alternatief, pin naar een toekomstige release die volledige named-page-lay-out-ondersteuning landt.
  • Wanneer hij wordt opgeworpen. Tekstsegmentatie werpt deze op wanneer hij de International Components for Unicode (ICU)-regelafbreek-iterator nodig heeft maar de require-ICU-policy actief is (NEXTPDF_REQUIRE_ICU=1) terwijl de ext-intl- extensie en IntlBreakIterator niet beschikbaar zijn.
  • Meegedragen data. Breidt RuntimeException rechtstreeks uit, dus is hij niet context-bewust en heeft hij geen getContext(). Het is een strikte verfijning van de generieke uitzondering die hetzelfde codepad voorheen opwierp, dus bestaande catch (\RuntimeException)-handlers blijven werken.
  • Herstel. Installeer en schakel ext-intl in zodat de ICU-break-iterator beschikbaar is, of unset NEXTPDF_REQUIRE_ICU om terug te vallen op de niet-ICU- segmenter waar de require-ICU-policy niet verplicht is.
  • Wanneer hij wordt opgeworpen. Dit is de basisuitzondering voor de script-shaping- service provider interface (SPI). Hij wordt vandaag niet rechtstreeks opgeworpen; concrete subtypes worden in plaats daarvan opgeworpen. Vang dit type op om elke shaping-storing op één plek af te handelen.
  • Meegedragen data. Breidt RuntimeException rechtstreeks uit; niet context-bewust, geen getContext().
  • Herstel. Vertak op het concrete subtype. Zie NotYetImplementedException hieronder voor het enige subtype dat in de huidige release wordt meegeleverd.
  • Wanneer hij wordt opgeworpen. Elke placeholder-script-shaper werpt deze op vanuit zijn shape()-body voor scripts waarvan de concrete shaping is uitgesteld (Mongools en Tibetaans). De shaping-SPI-naad is architectuur-klaar, maar echte shaping is in afwachting van een door een native speaker gevalideerde fixture. Een uitzondering opwerpen in plaats van een stille no-op brengt accidentele productiebedrading tijdens runtime aan de oppervlakte in plaats van ongeshapete tekst uit te voeren in een PDF die getagde toegankelijkheid claimt.
  • Meegedragen data. Breidt ScriptShaperException uit (en daarmee RuntimeException), dus is hij niet context-bewust en heeft hij geen getContext(). De diagnostische data staat op zijn public readonly properties: bcp47LanguageTag (de BCP-47-tag van de run, zoals mn-Mong of bo-Tibt) en missingCapability (de concrete capability die de implementatie mist). Het bericht bevat beide.
  • Herstel. Route runs in de niet-geïmplementeerde scripts niet door de shaper in productie. Detecteer de taaltag stroomopwaarts en val ofwel terug op een ander rendering-pad of pin naar een toekomstige release die shaping landt voor het betrokken script.
  • Wanneer hij wordt opgeworpen. De writer werpt deze op wanneer een document een feature bevat die verboden is onder het PDF 1.4-uitvoerprofiel (ISO 19005-1:2005 / PDF/A-1), dat constructs verbiedt die in latere PDF-versies werden geïntroduceerd.
  • Meegedragen data. Breidt NextPdfException uit maar overschrijft getContext() niet, dus geeft getContext() een lege array terug. De diagnostische data staat op zijn public readonly properties: feature (de afgewezen feature-naam), reason (waarom hij verboden is) en isoClause (de ISO-clausuleverwijzing). Het bericht combineert alle drie.
  • Herstel. Verwijder of vervang de afgewezen feature door een PDF 1.4-compatibel equivalent, of richt je op een hoger uitvoerprofiel dat de feature toestaat.
  • Wanneer hij wordt opgeworpen. De writer werpt deze op wanneer een document een feature bevat die verboden is onder het strikte PDF 2.0-uitvoerprofiel. ISO 32000-2:2020 deprecate’t constructs die PDF 1.7 nog toestond — met name de Standard 14 Type 1-lettertypen (§9.6.2), die moeten worden ingebed in een conform PDF 2.0-document.
  • Meegedragen data. Zelfde vorm als Pdf14FeatureRejectedException: breidt NextPdfException uit, overschrijft getContext() niet (geeft een lege array terug), en stelt feature, reason en isoClause beschikbaar als public readonly properties.
  • Herstel. Remedieer de afgewezen feature — bijvoorbeeld, embed de base 14- lettertypen — of neem de gedocumenteerde escape hatch waar er een bestaat (voor niet-ingebedde base 14-lettertypen, Document::allowNonEmbeddedBase14()).
  • Wanneer hij wordt opgeworpen. PdfWriter::build() werpt deze op bij het toegangspunt wanneer de encryptionMode van het document pubkey is (een public-key-recipient- lijst) voordat de writer-side public-key-stream-body-versleutelingsdispatch is bedraad. Vooraf weigeren voorkomt dat stilletjes een onversleutelde PDF wordt uitgevoerd die de aanroeper dacht dat versleuteld was.
  • Meegedragen data. Breidt RuntimeException rechtstreeks uit, dus is hij niet context-bewust en heeft hij geen getContext(). Het is een strikte verfijning van de generieke uitzondering die dezelfde site voorheen opwierp, dus bestaande catch (\RuntimeException)-handlers blijven werken.
  • Herstel. Gebruik een ondersteunde versleutelingsmodus (password-based encryption) in plaats van de public-key-recipient-lijst, of pin naar een release die public-key-versleutelingsondersteuning landt. Behandel de uitvoer niet als versleuteld wanneer dit wordt opgeworpen.
  • Wanneer hij wordt opgeworpen. De object-graph-reader werpt deze op, fail-closed, wanneer een invoer-PDF buiten zijn ondersteunde envelope valt. De reader ondersteunt klassieke cross-reference-tabellen (ISO 32000-2:2020 §7.5.4), cross-reference streams (§7.5.8), object-stream-gecomprimeerde objecten (§7.5.7), multi-revisie-/Prev- ketens (§7.5.6), en hybrid-reference-bestanden via /XRefStm (§7.5.8.4). Alles buiten die envelope brengt deze uitzondering aan de oppervlakte in plaats van een gedeeltelijke of geraden parse. Benoemde constructors mappen naar de reden-cases: encrypted(), damagedCrossReference(), cyclicReferenceChain(), nonConformantObjectStream(), irresolvableObjectCollision(), truncatedFile(), en crossReferenceOffsetOutOfBounds().
  • Meegedragen data. Breidt RuntimeException rechtstreeks uit, dus is hij niet context-bewust en heeft hij geen getContext(). Hij stelt een public readonly reason-property van type UnsupportedPdfStructureReason (een enum) beschikbaar zodat aanroepers vertakken op de precieze categorie zonder het bericht te parsen; een optionele detail-string en een previous throwable kunnen begrensde, niet-gevoelige context toevoegen. Het standaardbericht is de niet-lekkende samenvatting van de reden.
  • Herstel. Vertak op reason. Voor EncryptedDocument, voer een decrypt-stap uit vóór het lezen, omdat ontsleuteling buiten de reikwijdte van de reader valt. Voor DamagedCrossReference, TruncatedFile of CrossReferenceOffsetOutOfBounds, behandel het bestand als misvormd of incompleet en heracquireer of repareer de bron. Voor CyclicReferenceChain, NonConformantObjectStream of IrresolvableObjectCollision, schendt de invoer het structurele model en kan hij niet as-is worden gelezen.
  • Wanneer hij wordt opgeworpen. De streaming-XMP-metadata-reader werpt deze op wanneer een ingebed XMP-pakket het geconfigureerde byte-plafond overschrijdt. Het is een defensieve guard tegen entity-expansion- en quadratic-blowup-achtige invoer (een 128 MB peak-plafond tegen XMP op gigabyte-schaal ingebed).
  • Meegedragen data. Breidt NextPdfException uit maar overschrijft getContext() niet, dus geeft getContext() een lege array terug. De diagnostische data staat op zijn public readonly properties: byteCount (het waargenomen byte-aantal) en cap (de geconfigureerde cap in bytes). Het bericht rapporteert beide.
  • Herstel. Wijs de te grote metadata af of sla hem over als kwaadaardig of misvormd. Als een legitiem document daadwerkelijk een groter pakket nodig heeft, verhoog de geconfigureerde cap opzettelijk, en weeg het geheugenuitputtingsrisico af dat de guard bestaat om te voorkomen.