function ValidatePdfVT: TPdfVTValidationResult;
ValidatePdfVT percorre o documento aberto procurando os marcadores de nível de formato de arquivo definidos pela ISO 16612-2:2010:
pdfvtid:GTS_PDFVTVersion (§6.3 Table 2) e pdfvtid:GTS_PDFVTModDatepdfvtid:GTS_PDFVTModDate e xmp:ModifyDate (§6.3 NOTE 1)pdfxid:GTS_PDFXVersion — PDF/VT-1 deve ser PDF/X-4 (§6.2.1), enquanto PDF/VT-2 deve usar uma das bases de file-set PDF/X-4p, PDF/X-5g ou PDF/X-5pg (§6.2.2)pdfaExtension:schemas para os namespaces pdfvtid e pdfxid/DPartRoot do catálogo com uma árvore DPart utilizável da §6.5: a /DPartRootNode, a /NodeNameList compatível com NMTOKEN de XML, os vínculos de pai, o array de arrays /DParts, os intervalos folha /Start//End e as referências /DPart por página devem cobrir a árvore de páginas exatamente uma vez em ordem de profundidadeGTS_XID, GTS_Scope e GTS_Env, o RecordLevel indireto de DPartRoot usado pelo escopo Record e o limite exclusivo de PDF/VT-2s para o escopo StreamFlateDecode, resolvendo cada operando Do através dos recursos herdados efetivos para impor contagens de SingleUse, visibilidade de recursos e propriedade de destinatário único para o escopo RecordIntent de Image, o Group de transparência isolada exigido com um espaço de cores de mesclagem e operadores marcados de optional-content em conteúdo de Form direto ou aninhado/OutputIntents do catálogo com um OutputIntent que tem um /DestOutputProfile embutido ou um /DestOutputProfileRef externo apropriado para a base PDF/X/ID no trailer e a ausência de /Encrypt (o PDF/X proíbe criptografia)xmp:CreateDate e xmp:ModifyDate no XMP para paridade Info / XMPO resultado é um record TPdfVTValidationResult:
pvc1 (marcador PDF/VT-1), pvc2 (marcador PDF/VT-2), pvcNone (nenhum marcador PDF/VT) ou pvcUnknown (marcador presente, mas versão de nível de arquivo não reconhecida)TPdfVTValidationIssues com zero ou mais valores de problemas de marcador, DPart, herança PDF/X, objeto recorrente e encapsulamentopvviGtsScopeInvalidValue, pvviGtsScopeRecordWithoutRecordLevel, pvviGtsXidNotUuid, pvviGtsEnvMissing, pvviGtsXidInvalidType, pvviGtsEnvInvalidType, pvviGtsScopeStreamInVT1, pvviGtsScopeSingleUseRepeated, pvviGtsScopeRecordCrossesRecords e pvviGtsResourceNotVisiblepvviGtsEncapsulatedInvalidType, pvviGtsEncapsulatedMissingScope, pvviGtsEncapsulatedImageMissingIntent, pvviGtsEncapsulatedGroupInvalid e pvviGtsEncapsulatedOptionalContentConformance é um nível PDF/VT real e Issues está vazioValidatePdfVT é somente leitura. Ele verifica os marcadores de
formato de arquivo, a semântica selecionada da árvore DPart, o escopo
e o encapsulamento de XObjects recorrentes, o pareamento exato de
base PDF/VT para PDF/X e as propriedades XMP, quer elas sejam
escritas como elementos ou atributos RDF. Combine-o com um motor de
preflight PDF/X para a verificação completa de nível de conteúdo e,
para PDF/VT-2, com InspectPdfVT2sStream ou outro validador completo de
file-set. PDF/VT-2s é um nível de conformidade de stream MIME cuja
versão é sinalizada pelo cabeçalho do stream MIME no ISO 16612-2
Annex A, e não por um valor de arquivo pdfvtid:GTS_PDFVTVersion
pvviMissingDPartRoot é emitido quando o catálogo não tem uma hierarquia /DPartRoot utilizável ou quando a árvore viola requisitos da §6.5, como arrays /DParts malformados, /Start e /DParts misturados, propriedade de filhos duplicada, nomes de /NodeNameList inválidos ou divergências de profundidade, intervalos de páginas que não seguem a ordem da árvore de páginas, intervalos de página única que repetem /Start como /End ou vínculos /DPart de página que não apontam para o DPart folha de coberturaFlateDecode diretos; streams de conteúdo com outros filtros ou filtros encadeados permanecem disponíveis para motores de preflight completo dedicadospvviModDateMismatch é emitido apenas quando pdfvtid:GTS_PDFVTModDate e xmp:ModifyDate estão presentes e seus valores diferem; SaveAsPdfVT sempre os grava com o mesmo valorConformance = pvcUnknown e um conjunto Issues vazio
uses System.TypInfo;
var
Outcome: TPdfVTValidationResult;
Issue: TPdfVTValidationIssue;
begin
Pdf1.FileName := 'C:\Incoming\statements.pdf';
Pdf1.Active := True;
Outcome := Pdf1.ValidatePdfVT;
Memo1.Lines.Add('Level: ' + GetEnumName(TypeInfo(TPdfVTConformance),
Ord(Outcome.Conformance)));
for Issue in Outcome.Issues do
Memo1.Lines.Add('- ' + GetEnumName(TypeInfo(TPdfVTValidationIssue), Ord(Issue)));
end;