Erros de renderização e I/O
Estas entradas cobrem as exceções de renderização e de entrada/saída (I/O) geradas enquanto o pipeline de HTML faz o layout do conteúdo, o resolvedor de mídia paginada atribui a geometria de página, o text shaper processa scripts complexos, o estágio de tipografia quebra linhas, o writer serializa um documento, o reader faz parsing de um PDF existente e o estágio de metadados lê um pacote Extensible Metadata Platform (XMP).
Duas hierarquias base aparecem abaixo, e a diferença governa quais dados de diagnóstico
você pode ler após um catch:
NextPdfExceptionimplementaContextAwareExceptionInterface::getContext(): array. A implementação base retorna um array vazio; uma subclasse carrega chaves estruturadas somente quando sobrescrevegetContext(). Subclasses que não a sobrescrevem ainda expõem seus dados por meio de propriedadespublic readonly.- Várias classes aqui estendem a
RuntimeExceptiondo PHP diretamente. Elas não são sensíveis ao contexto e não têm métodogetContext(); leia seugetMessage()e quaisquer propriedades públicas.
Cada entrada nomeia a classe exata, a condição de gatilho, as chaves de contexto ou propriedades públicas que carrega e o caminho de recuperação.
Layout de HTML e mídia paginada
Seção intitulada “Layout de HTML e mídia paginada”UnsplittableContentException
Seção intitulada “UnsplittableContentException”- Quando é gerada. O engine de layout de HTML gera isto quando conteúdo marcado
como
break-inside: avoid(uma célula de tabela cuja restrição de quebra éAvoid) tem uma altura medida que excede a altura utilizável de uma única página. O engine não consegue satisfazer ao mesmo tempo a restrição avoid-break e o limite da página, então ele falha em vez de transbordar silenciosamente. - Dados carregados. Estende
NextPdfException, mas não sobrescrevegetContext(), entãogetContext()retorna um array vazio. Os dados de diagnóstico estão em propriedadespublic readonly:gridRow(int),gridCol(int),contentHeight(float, pontos) epageHeight(float, pontos). A mensagem informa as coordenadas da célula e ambas as alturas. - Recuperação. Remova a restrição
break-inside: avoidda célula problemática, reduza o conteúdo da célula para que caiba em uma página, ou aumente o tamanho da página ou reduza suas margens para que a altura utilizável acomode o conteúdo.
BudgetExceededException
Seção intitulada “BudgetExceededException”- Quando é gerada. Os primitivos de layout do modo retained geram isto quando um dos
quatro tiers de orçamento de recursos definidos no registro de decisão de arquitetura
ADR-020 é violado e o chamador optou por uma falha rígida em vez do
fallback suave. O caminho padrão não gera exceção:
ContainerLayout::acceptChild()retornafalse, o chamador recorre ao layout de bloco e um aviso é emitido. A exceção é reservada para validação em tempo de configuração e para testes que verificam a tupla de violação exata. Os tiers sãoper-child(um stream de filho capturado excede seu limite),per-container(o orçamento de contagem de nós do Tier 1),per-document(o orçamento de passagem de layout ou de profundidade de aninhamento) eglobal(o teto de resident-set-size de pico de 256 MB de todo o SDK). - Dados carregados. Sobrescreve
getContext(), que retorna um formato estável de oito chaves consumido por ferramentas de monitoramento de desempenho de aplicações (APM):budgetTier,exceededValue,budgetLimit,containerType,phase,breachOrigin,captureSizeeprocessedItemCount. As primeiras quatro chaves são o subconjunto original da v1.0.0 e são sempre preenchidas; as últimas quatro têm padrãonullou0quando o construtor é chamado sem elas.getCausalWarningCode()mapeia a tupla (tier, container-type) para oWarningCodeque o caminho de fallback suave teria emitido. - Recuperação. Para uma violação de configuração, reduza o valor solicitado de volta ao
envelope documentado (por exemplo, o orçamento de nós retained aceita
5.000a100.000viaConfig::withRetainedNodeBudget()). Para uma violação de conteúdo, reduza o aninhamento de contêineres ou a contagem de nós, ou confie no fallback suave padrão para o layout de bloco em vez de optar pela superfície de falha rígida.
UnsupportedNamedPageException
Seção intitulada “UnsupportedNamedPageException”- Quando é gerada. O estágio de mídia paginada gera isto, com falha fechada, quando um
documento declara uma regra
@page <ident> { … }nomeada (vinculada ao conteúdo por meio da propriedadepage: <ident>). Páginas nomeadas do CSS Paged Media Level 3 §3.4 e Level 4 §3.2 — incluindo as pseudoclasses:first,:left,:righte:blanke as substituições nomeadas desize:erotate:— são parseadas, mas nenhum caminho de layout de produção as consome. O engine se recusa em vez de emitir a paginação padrão silenciosamente incorreta que descartar a regra produziria. - Dados carregados. Sobrescreve
getContext(), que retornapage_names(lista dos idents distintos que dispararam a falha, na ordem da origem),has_size_override(bool),has_rotate_override(bool) ehas_pseudo_classes(bool). Os mesmos valores são expostos nas propriedades públicaspageNames,hasSizeOverride,hasRotateOverrideehasPseudoClasses. - Recuperação. Remova as regras
@page <ident>nomeadas e quaisquer vinculaçõespage: <ident>, e expresse a geometria pretendida por meio da regra@page { … }sem nome suportada e suas formas de pseudoclasse. Como alternativa, fixe em uma versão futura que entregue suporte completo a layout de página nomeada.
Tipografia e text shaping
Seção intitulada “Tipografia e text shaping”IcuRequirementException
Seção intitulada “IcuRequirementException”- Quando é gerada. A segmentação de texto gera isto quando precisa do
iterador de quebra de linha do International Components for Unicode (ICU), mas a
política require-ICU está ativa (
NEXTPDF_REQUIRE_ICU=1) enquanto a extensãoext-intleIntlBreakIteratorestão indisponíveis. - Dados carregados. Estende
RuntimeExceptiondiretamente, então não é sensível ao contexto e não temgetContext(). É um refinamento estrito da exceção genérica que o mesmo caminho de código gerava anteriormente, então handlerscatch (\RuntimeException)existentes continuam funcionando. - Recuperação. Instale e ative
ext-intlpara que o iterador de quebra do ICU esteja disponível, ou removaNEXTPDF_REQUIRE_ICUpara recorrer ao segmentador não-ICU onde a política require-ICU não é obrigatória.
ScriptShaperException
Seção intitulada “ScriptShaperException”- Quando é gerada. Esta é a exceção base para a service provider interface (SPI) de shaping de script. Ela não é gerada diretamente hoje; subtipos concretos são gerados em vez disso. Capture este tipo para tratar qualquer falha de shaping em um só lugar.
- Dados carregados. Estende
RuntimeExceptiondiretamente; não é sensível ao contexto, semgetContext(). - Recuperação. Ramifique pelo subtipo concreto. Consulte
NotYetImplementedExceptionabaixo para o único subtipo distribuído na versão atual.
NotYetImplementedException
Seção intitulada “NotYetImplementedException”- Quando é gerada. Cada text shaper placeholder gera isto a partir do corpo de seu
shape()para scripts cujo shaping concreto está adiado (Mongol e Tibetano). A junção da SPI de shaping está pronta em arquitetura, mas o shaping real está pendente de uma fixture validada por falante nativo. Gerar uma exceção em vez de um no-op silencioso expõe a conexão acidental em produção em tempo de execução, em vez de emitir texto sem shaping em um PDF que afirma acessibilidade tagueada. - Dados carregados. Estende
ScriptShaperException(e, portanto,RuntimeException), então não é sensível ao contexto e não temgetContext(). Os dados de diagnóstico estão em suas propriedadespublic readonly:bcp47LanguageTag(a tag BCP-47 do run, comomn-Mongoubo-Tibt) emissingCapability(a capacidade concreta que a implementação não tem). A mensagem inclui ambas. - Recuperação. Não roteie runs nos scripts não implementados pelo shaper em produção. Detecte a tag de idioma a montante e recorra a um caminho de renderização diferente ou fixe em uma versão futura que entregue shaping para o script afetado.
Perfis de saída do writer e criptografia
Seção intitulada “Perfis de saída do writer e criptografia”Pdf14FeatureRejectedException
Seção intitulada “Pdf14FeatureRejectedException”- Quando é gerada. O writer gera isto quando um documento contém um recurso proibido sob o perfil de saída PDF 1.4 (ISO 19005-1:2005 / PDF/A-1), que proíbe construções introduzidas em versões posteriores do PDF.
- Dados carregados. Estende
NextPdfException, mas não sobrescrevegetContext(), entãogetContext()retorna um array vazio. Os dados de diagnóstico estão em suas propriedadespublic readonly:feature(o nome do recurso rejeitado),reason(por que ele é proibido) eisoClause(a referência de cláusula ISO). A mensagem combina os três. - Recuperação. Remova ou substitua o recurso rejeitado por um equivalente compatível com PDF 1.4, ou tenha como alvo um perfil de saída superior que permita o recurso.
Pdf20FeatureRejectedException
Seção intitulada “Pdf20FeatureRejectedException”- Quando é gerada. O writer gera isto quando um documento contém um recurso proibido sob o perfil de saída estrito de PDF 2.0. A ISO 32000-2:2020 descontinua construções que o PDF 1.7 ainda permitia — mais notavelmente as fontes Standard 14 Type 1 (§9.6.2), que devem ser incorporadas em um documento PDF 2.0 conforme.
- Dados carregados. Mesmo formato de
Pdf14FeatureRejectedException: estendeNextPdfException, não sobrescrevegetContext()(retorna um array vazio) e expõefeature,reasoneisoClausecomo propriedadespublic readonly. - Recuperação. Remedie o recurso rejeitado — por exemplo, incorpore as base 14
fonts — ou use a saída de escape documentada onde houver uma (para fontes base 14 não
incorporadas,
Document::allowNonEmbeddedBase14()).
PublicKeyEncryptionUnsupportedException
Seção intitulada “PublicKeyEncryptionUnsupportedException”- Quando é gerada.
PdfWriter::build()gera isto no ponto de entrada quando oencryptionModedo documento épubkey(uma lista de destinatários de chave pública) antes de a dispatch de criptografia de corpo de stream por chave pública do lado do writer ser conectada. Recusar de antemão evita emitir silenciosamente um PDF não criptografado que o chamador acreditava estar criptografado. - Dados carregados. Estende
RuntimeExceptiondiretamente, então não é sensível ao contexto e não temgetContext(). É um refinamento estrito da exceção genérica que o mesmo site gerava anteriormente, então handlerscatch (\RuntimeException)existentes continuam funcionando. - Recuperação. Use um modo de criptografia suportado (criptografia baseada em senha) em vez da lista de destinatários de chave pública, ou fixe em uma versão que entregue suporte a criptografia de chave pública. Não trate a saída como criptografada quando isto for gerado.
Entrada do reader e de metadados
Seção intitulada “Entrada do reader e de metadados”UnsupportedPdfStructureException
Seção intitulada “UnsupportedPdfStructureException”- Quando é gerada. O reader de grafo de objetos gera isto, com falha fechada, quando
um PDF de entrada cai fora de seu envelope suportado. O reader suporta tabelas de
cross-reference clássicas (ISO 32000-2:2020 §7.5.4), cross-reference streams
(§7.5.8), objetos comprimidos em object stream (§7.5.7), cadeias
/Prevmultirrevisão (§7.5.6) e arquivos de referência híbrida via/XRefStm(§7.5.8.4). Qualquer coisa fora desse envelope expõe esta exceção em vez de um parsing parcial ou adivinhado. Construtores nomeados mapeiam para os casos de motivo:encrypted(),damagedCrossReference(),cyclicReferenceChain(),nonConformantObjectStream(),irresolvableObjectCollision(),truncatedFile()ecrossReferenceOffsetOutOfBounds(). - Dados carregados. Estende
RuntimeExceptiondiretamente, então não é sensível ao contexto e não temgetContext(). Ela expõe uma propriedadepublic readonlyreasondo tipoUnsupportedPdfStructureReason(um enum) para que os chamadores ramifiquem pela categoria precisa sem fazer parsing da mensagem; uma stringdetailopcional e um throwablepreviouspodem adicionar contexto delimitado e não sensível. A mensagem padrão é o resumo não vazante do motivo. - Recuperação. Ramifique por
reason. ParaEncryptedDocument, execute uma etapa de descriptografia antes de ler, já que a descriptografia está fora do escopo do reader. ParaDamagedCrossReference,TruncatedFileouCrossReferenceOffsetOutOfBounds, trate o arquivo como malformado ou incompleto e readquira ou repare a origem. ParaCyclicReferenceChain,NonConformantObjectStreamouIrresolvableObjectCollision, a entrada viola o modelo estrutural e não pode ser lida como está.
PacketTooLargeException
Seção intitulada “PacketTooLargeException”- Quando é gerada. O reader de metadados XMP em streaming gera isto quando um pacote XMP incorporado excede o teto de bytes configurado. É um guard defensivo contra entradas do estilo entity-expansion e quadratic-blowup (um teto de pico de 128 MB contra XMP incorporado em escala de gigabytes).
- Dados carregados. Estende
NextPdfException, mas não sobrescrevegetContext(), entãogetContext()retorna um array vazio. Os dados de diagnóstico estão em suas propriedadespublic readonly:byteCount(a contagem de bytes observada) ecap(o limite configurado em bytes). A mensagem relata ambos. - Recuperação. Rejeite ou ignore os metadados grandes demais como maliciosos ou malformados. Se um documento legítimo genuinamente precisar de um pacote maior, aumente o limite configurado deliberadamente, ponderando o risco de exaustão de memória que o guard existe para evitar.
Veja também
Seção intitulada “Veja também”- Índice de referência de erros
- Solução de problemas de fontes e tagueamento — para os sintomas de
NotYetImplementedException,ScriptShaperExceptioneIcuRequirementException. - Solução de problemas de validação de PDF/A e PDF/UA — para os sintomas de
Pdf14FeatureRejectedExceptionePdf20FeatureRejectedException. - Solução de problemas de criptografia e permissões — para
PublicKeyEncryptionUnsupportedExceptione o motivoEncryptedDocumentdo reader.