Automated Validation Coverage
A atualização de relatórios de verificação prévia da versão 3.56.37 acrescenta um caminho de automatização documentado às verificações de ficheiros PDF/A e PDF/UA-1 existentes. A demonstração Delphi PreflightReport abrange agora relatórios de ficheiro único, lotes de diretórios, saída de texto/JSON/HTML/CSV, ficheiros CSV de resumo em UTF-8 e comparação de referência em texto simples através de ComparePreflightReports. Tests.Preflight verifica secções de relatórios, JSON legível por máquina, HTML autónomo, linhas CSV, saída guardada em UTF-8, linhas de diferenças e normalização de carimbos temporais.
A série de auditorias PDF/UA das versões 3.56.0 a 3.56.25 alarga o diagnóstico do leitor e do escritor para metadados PDF/UA-1, MarkInfo, RoleMap, permissões de acessibilidade da encriptação, XFA, Reference XObjects, ordem de tabulação e descrições de anotações, nomes FileSpec, dicionários de configuração OCG, incorporação de tipos de letra e codificação TrueType, ordem de títulos, numeração de listas, IDs de Note, clips multimédia e filhos H diretos repetidos. O caminho de baixo nível do leitor é exposto por CheckFileCompliance; o caminho em memória do lado do escritor é exposto por GetPDFUADiagnostics.
O trabalho de validação PAdES da série 3.56.x acrescenta testes e cobertura de referência para seleção de resumo, atributos autenticados PAdES-B-B, IssuerSerial de signing-certificate-v2, extensão por carimbo temporal de assinatura, composição DSS/VRI, indicação do tipo de compromisso e atributos da política de assinatura. Estas verificações são cobertas pelos testes de assinatura e pelas páginas de referência PAdES dedicadas em Segurança e assinaturas.
A atualização de validação 3.23.0 torna estrita a verificação de conformidade da versão para PDF 1.2 e acrescenta verificações do nível de extensão Adobe do PDF 1.7. Os destinos de gravação PDF 1.2 rejeitam agora funcionalidades PDF 1.3+, como dados TrimBox da página, antes de a saída ser escrita. AESV3, AES-256, RichMedia, Projection, dicionários geoespaciais e subfiltros de assinatura ETSI são verificados face à declaração /Extensions /ADBE /ExtensionLevel exigida. Os pontos de entrada do escritor que emitem essas funcionalidades declaram agora automaticamente o nível de extensão ADBE correspondente e as gravações anexadas executam a mesma verificação prévia das gravações completas. Tests.Document, Tests.Version e o fixture C++Builder Tests.VersionCompliance cobrem a rejeição estrita de PDF 1.2, a saída ExtensionLevel de AES-256, a verificação antes de acrescentar e as regras SSOT do nível de extensão.
A atualização de validação 3.20.0 alarga a cobertura EnsureMinVersion do escritor a mais oito pontos de entrada PDFlib: SetDocumentMetadata (PDF 1.4 — fluxo XMP /Metadata), SetPDFAMode (PDF 1.4 — /MarkInfo e /OutputIntents), PageJavaScriptAction (PDF 1.5 — /AA da página), DocJavaScriptAction (PDF 1.4 — /AA do catálogo), SetTabOrderMode (PDF 1.5 — /Tabs da página), NewOptionalContentGroup (PDF 1.5 — /Type /OCG), SetNeedAppearances (PDF 1.5 — AcroForm /NeedAppearances) e NewFormField para campos de assinatura (PDF 1.5 — bit AppendOnly de AcroForm /SigFlags). Com as entradas v3.15.0 e v3.17.0, PDFlib aumenta agora automaticamente FVersion em vinte e um pontos de entrada do escritor. NewOptionalContentGroup aumentava antes FVersion diretamente, ignorando EnsureMinVersion e LockSaveVersion; passa agora pelo caminho correto, respeitando o bloqueio e registando o aumento em AutoBumpedFeatures. Tests.Document cobre seis novos casos de aumento automático.
A atualização de validação 3.19.0 implementa quatro regras SSOT anteriormente adiadas. O indicador NoToggleToOff no bit 15 de /Ff para campos Btn, com máscara 16384, limita o comportamento exclusivo dos botões de opção a PDF 1.4 e distingue /FT = 'Btn'. A regra DeviceN /Subtype /NChannel reconhece o refinamento NChannel do espaço de cor PDF 1.6 codificado no dicionário de atributos no índice 4 do array DeviceN. A regra FontFile3 /Subtype /OpenType reconhece programas de tipo de letra OpenType PDF 1.6 quando o fluxo é alcançado através de uma chave pai chamada 'FontFile3'. A regra Sig /SubFilter ETSI aplica-se a dicionários de assinatura com /SubFilter ETSI.CAdES.detached ou /SubFilter ETSI.RFC3161, ambos PDF 1.7. É o primeiro conjunto de callbacks SSOT que depende da consciência de contexto Ctx.KeyName. Tests.Version confirma as quatro regras e a MinVersion correta. O número de regras aumentou de 99 para 103.
A atualização de validação 3.18.6 acrescenta regras contextuais de /AA, ou ações adicionais. /AA surge em quatro contentores de dicionário PDF com versões mínimas diferentes: /AA do catálogo para acionadores ao nível do documento em PDF 1.4, /AA de Annot em PDF 1.4, /AA da página em PDF 1.5 e /AA do campo de formulário em PDF 1.2, válido em destinos estritos PDF 1.2. Três novos callbacks fmkCustom distinguem por /Type, pelo que /AA só aciona a regra correspondente ao contentor. O /AA de uma anotação Widget, que também é um campo de formulário, utiliza intencionalmente o ramo Annot /AA de PDF 1.4; é uma aproximação aceite porque todos os contratos de gravação desde PDF 1.4 já aceitam /AA em campos. Tests.Version confirma as três regras contextuais. O total aumentou de 96 para 99.
A atualização de validação 3.18.5 corrige a classificação da regra /Tabs e acrescenta uma regra /NeedAppearances. /Tabs, a ordem de tabulação da página, estava indicado como PDF 1.4 em PDFFeatureRules, mas a especificação de alterações Adobe PDF 1.4, Technical Note #5409, não o introduz; surge pela primeira vez na Tabela 8.10 de PDF 1.5, Page Object. A regra passa para a secção PDF 1.5. Uma nova regra cobre AcroForm /NeedAppearances, da Tabela 218 de PDF 1.5, que não tinha representação anterior. Tests.Version confirma que /Tabs não tem entrada PDF 1.4 e que a regra PDF 1.5 de /NeedAppearances existe. O total aumentou de 95 para 96.
A atualização de validação 3.18.1 alarga as regras ao nível de bits com sete callbacks de indicadores /Ff de campos de formulário e o bit AppendOnly de AcroForm /SigFlags. Tx FileSelect (1048576), Ch MultiSelect (2097152), Tx/Ch DoNotSpellCheck (4194304) e Tx DoNotScroll (8388608) exigem PDF 1.4; Tx Comb (16777216), Tx RichText / Btn RadiosInUnison (33554432), Ch CommitOnSelChange (67108864) e AcroForm SigFlags AppendOnly (máscara 2) exigem PDF 1.5. A herança /Parent não é seguida — só os dicionários que contêm explicitamente /Ff ou /SigFlags acionam as regras. Tests.Document cobre um fixture Tx /Ff 16777220, Comb + NoExport, que aumenta o carregador de 1.4 para 1.5 e inclui Comb em ContributorFeatures.
A atualização de validação 3.18.0 começa a acrescentar regras de subchaves e bits a PDFFeatureRules. Três regras de bits dos indicadores de anotação cobrem os valores de máscara /F para Locked (128, PDF 1.4), ToggleNoView (256, PDF 1.5) e LockedContents (512, PDF 1.7); só se aplicam quando o dicionário é /Type /Annot. Seis novas regras fmkDictKey cobrem subchaves distintas do catálogo e da página: /BoxColorInfo (PDF 1.4), /Permissions, /Legal e /PresSteps (PDF 1.5), /VP (PDF 1.6) e /Collection (PDF 1.7). Tests.Document cobre um fixture Annot /F 516, Print + LockedContents, que aumenta o carregador de 1.4 para 1.7 e inclui LockedContents em ContributorFeatures. Tests.Version confirma as novas regras.
A atualização de validação 3.17.0 alarga a cobertura EnsureMinVersion do escritor a mais oito pontos de entrada PDFlib: AddLinkToJavaScript, SetOpenActionJavaScript, AddGlobalJavaScript e FormFieldJavaScriptAction, todos PDF 1.3; AddEmbeddedFile e AddFileAttachment, PDF 1.3; SetXFAFromString, PDF 1.5; e AddSWFAnnotationFromFile, PDF 1.7. Com as entradas originais v3.15.0, PDFlib aumenta agora automaticamente FVersion em treze pontos de entrada de versões superiores. Tests.Document cobre o trio JavaScript que aumenta um documento novo de PDF 1.2 para PDF 1.3.
A atualização de validação 3.16.3 acrescenta um bloqueio opcional de versão. A nova API PDFlib LockSaveVersion(Version) fixa FVersion em Version e impede que EnsureMinVersion do escritor na Fase 3 o aumente; UnlockSaveVersion remove o bloqueio. A verificação ao guardar não muda, pelo que um documento bloqueado que receba uma funcionalidade de versão superior através de uma chamada do escritor continua a falhar com LastErrorCode 602. Tests.Document cobre o bloqueio em 1.3 com SetTransparency, o bloqueio em 1.6 com SetTransparency / SetPageUserUnit e a sequência bloquear, recusar SetTransparency, desbloquear e permitir SetTransparency.
A atualização de validação 3.16.2 acrescenta uma vista apenas dos contributos da deteção de funcionalidades ao carregar. CollectMatchesForObject e DetectFeaturesInObjectTree recebem agora BaselineVersion para separar todas as correspondências, em DetectedFeatures e GetInformation 101, das correspondências cuja MinVersion está estritamente acima da referência, em ContributorFeatures e GetInformation 103. TPDFDocument.DetectVersionFromContent fornece HeaderVersion como referência, permitindo que ContributorFeatures explique por que motivo a versão efetiva é superior ao cabeçalho literal. Tests.Document cobre casos em que /CA é filtrado e em que apenas /UserUnit 1.6 contribui, enquanto /TrimBox 1.3 e /StructTreeRoot 1.4 são excluídos.
A atualização de validação 3.16.1 alarga a deteção no carregador com seis fixtures e testes sintéticos: um ExtGState de transparência na página, uma entrada /MarkInfo no catálogo, conteúdo /OCProperties + OCG, um objeto /Type /3DStream, uma combinação de várias funcionalidades que confirma a versão mínima mais alta e todas as entradas contribuintes, e uma verificação de estabilidade do instantâneo que confirma que os aumentos posteriores do escritor ficam em AutoBumpedFeatures enquanto DetectedFeatures permanece no instantâneo do carregamento.
A atualização de validação 3.16.0 conclui o plano de conformidade de versões PDF com deteção no carregador. Depois de LoadFromString / LoadFromFile / LoadFromStream, TPDFDocument.DetectVersionFromContent percorre todos os objetos indiretos através da SSOT e aumenta FVersion acima do valor literal do cabeçalho %PDF-X.Y quando o conteúdo exige uma versão superior. Três novas chaves GetInformation, 100 = HeaderVersion, 101 = DetectedFeatures e 102 = AutoBumpedFeatures, expõem o diagnóstico do carregador e do escritor. Tests.Document cobre um PageUserUnitFixture sintético e um documento novo sem dados de diagnóstico antes de qualquer carregamento.
A atualização de validação 3.15.0 encaminha os pontos de entrada do escritor PDFlib SetTransparency, SetPageUserUnit, Encrypt com níveis AES e os modos de duas páginas de SetPageLayout através de TPDFDocument.EnsureMinVersion, para que uma funcionalidade de versão superior num destino SetInformation inferior aumente automaticamente a versão em vez de gerar LastErrorCode 602 ao guardar. Tests.Document cobre os caminhos de SetTransparency, SetPageUserUnit e Encrypt(AES-256), além do caso sem alteração quando a versão já satisfaz o mínimo.
A atualização de validação 3.14.3 conclui a Fase 2 da conformidade de versões ao acrescentar os restantes tipos de dicionário 3D de PDF 1.6, /Type /3DStream /3DRef /3DBackground /3DRenderMode /3DLightingScheme /3DCrossSection /3DNode, e os subtipos de anotação Redact, RichMedia e Projection de PDF 1.7, juntamente com os dicionários auxiliares /Type /Requirement e /ReqHandler. A SSOT passa assim a cobrir funcionalidades ao nível de capítulos de PDF 1.3 a 1.7 numa única tabela.
A atualização de validação 3.14.2 alarga as regras de conformidade para reconhecer funcionalidades PDF 1.5: formulários /XFA, /AlternatePresentations, árvore de nomes /Renditions, dicionários multimédia /Type /Rendition /MediaCriteria /MediaPermissions /MediaPlayers e o subtipo de anotação Screen.
A atualização de validação 3.14.1 alarga as regras para funcionalidades PDF 1.4: /StructTreeRoot, /MarkInfo e dicionários StructElem, /Tabs da página e /Lang do documento, referências /StructParent e /StructParents, dicionários /OutputIntents e /OutputIntent, assinatura de direitos /UR3 e subtipos de anotação Polygon, PolyLine, Caret, Ink, Popup e Watermark. Tests.Document cobre a rejeição de /StructTreeRoot ao guardar como PDF 1.3 e a sua preservação em PDF 1.4.
A atualização de validação 3.14.0 alarga as regras para funcionalidades PDF 1.3, incluindo sombreado suave e funções, espaços ICCBased e DeviceN, TrimBox/BleedBox/ArtBox, CMaps /ToUnicode, anotações de ficheiro / Sound / Movie, dicionários /Type /Filespec e /Type /EmbeddedFile, chaves /Group /EF /Alternates /Mask e ações JavaScript. A versão 3.23.0 substitui a tolerância anterior por uma verificação PDF 1.2 estrita. Tests.Document cobre agora a rejeição de TrimBox e a verificação de versão em gravações anexadas bloqueadas.
A atualização de validação 3.13.0 mantém a rejeição ao guardar fora da versão da 3.12.7, LastErrorCode 602, mas move as regras para a unidade dedicada Lib\PDFlibVersion.pas e acrescenta o fixture DUnitX Tests.Version, que confirma as regras de referência v3.12.6 e a conversão de ida e volta dos auxiliares de cadeias de versão.
A matriz de validação 3.12.0 inclui build-zlib-bcc32, build-zlib-bcc64x, build-zlib-vc64, build-jpeg-bcc32 e build-jpeg-vc64, todos concluídos sem objetos falhados. As compilações dos pacotes da biblioteca também foram verificadas com build-Win32-Lib.cmd 37.0 e build-Win64-Lib.cmd 37.0.
As suites Delphi DUnitX atuais passaram 362 de 362 testes em Win32 e 362 de 362 em Win64. A cobertura inclui compressão, fluxos zlib conhecidos, limites, múltiplos blocos armazenados, saída HelloWorld /FlateDecode, JPEG e PNG, imagens, tipos de letra, formulários, encriptação, desencriptação, assinatura, atributos PAdES, impressão, Unicode, buffers, canvas, páginas, tabelas, documentos, sintaxe/xref, contratos PDF 1.2 estritos, verificação antes de acrescentar, extensões PDF 1.7, diagnóstico PDF/UA e geração/comparação de relatórios prévios.
A suite GoogleTest C++Builder Win64x atual passou 61 testes e ignorou 2 testes existentes dependentes de exemplos. Abrange fluxos derivados das demonstrações, zlib-ng, limites, cargas semelhantes a PNG, múltiplos blocos armazenados, imagens, renderização incluindo PdfToImage direto, encriptação, assinatura, impressão, PDF 1.2 estrito, extensão PDF 1.7, verificação antes de acrescentar e saída HelloWorld comprimida, validando o conjunto de objetos zlib-ng bcc64x através da ABI C++Builder.
A referência HTML é protegida por tools/test_docs_api_coverage.py, que confirma que todas as funções públicas TPDFlib têm uma página de referência inglesa, e por tools/test_docs_navigation.py, que mantém coerentes os destinos de navegação do registo de alterações multilingue na estrutura de ajuda com molduras.
Readme.html e a referência HTML devem permanecer alinhados quando mudar o comportamento visível de validação, verificação prévia, renderização, assinatura ou relatórios.