PDF Version-Specific Save Compatibility
A versão 3.23.0 trata a versão de gravação selecionada como contrato estrito de saída de uma gravação completa. Quando a aplicação chama SetInformation(0, "1.2"), "1.3", "1.4", "1.5", "1.6" ou "1.7", SaveToFile, SaveToString e SaveToStream escrevem saída correspondente ao destino ou falham antes de escrever
As gravações completas removem substituições Catalog /Version para impedir que um documento carregado eleve silenciosamente a versão efetiva. Destinos inferiores removem também entradas Catalog /Extensions não suportadas e destinos PDF 1.3 omitem Catalog /Metadata e fluxos XMP Metadata, preservando o dicionário de informações.
A verificação antes de guardar rejeita funcionalidades posteriores conhecidas em vez de produzir ficheiros com versões misturadas. Os limites incluem funcionalidades PDF 1.3, 1.4, 1.5, 1.6 e 1.7 para caixas de página, ficheiros incorporados, JavaScript, espaços de cor, CMaps, transparência, estrutura etiquetada, intents, object streams, OCG, XFA, formulários, UserUnit, OpenType, 3D, NChannel, rich media, projeção, redação e subfiltros ETSI; as mesmas regras abrangem /CA, JBIG2Decode, Metadata, EmbeddedFiles, JPXDecode, xref streams, Crypt, AESV2 e Requirements.
Os requisitos de nível de extensão Adobe PDF 1.7 são verificados separadamente do cabeçalho. AESV3, AES-256, RichMedia, Projection, dicionários geoespaciais e subfiltros ETSI exigem uma declaração Catalog /Extensions /ADBE /ExtensionLevel suficiente. Os pontos de entrada que emitem essas funcionalidades adicionam automaticamente a declaração correspondente quando o destino pode ser elevado a PDF 1.7.
Desde v3.67.0, a deteção de funcionalidades do carregador é diferida. O documento não é analisado imediatamente; a deteção ocorre quando a versão efetiva ou o diagnóstico é consumido por GetInformation(0/101/103), GetPDFUADiagnostics, SaveToFile, SaveToString, SaveToStream ou caminhos relacionados. Fluxos só de leitura que nunca consultem nem guardem podem evitar totalmente a análise.
Desde v3.67.1, a análise faz uma leitura superficial dos objetos de stream. Inspeciona dicionários e classificação, ignorando corpos grandes, mantendo equivalente a deteção de filtros, subtipos, espaços de cor e chaves de versão sem deixar que imagens grandes dominem. Leituras normais e todas as gravações continuam a ler o corpo completo quando necessário.
Desde v3.67.2, as escolhas explícitas de versão mantêm prioridade sobre a deteção diferida. Num documento carregado, SetInformation(0, ...) e LockSaveVersion executam o instantâneo pendente antes de aplicar a versão pedida, impedindo que uma consulta posterior eleve o destino. Documentos novos não são armados para deteção do carregador.
Os chamadores TPDFlib recebem LastErrorCode 602 quando a versão de destino é inferior a uma funcionalidade ainda presente. Escolha uma versão mais recente ou remova a funcionalidade incompatível antes de guardar