function ValidatePdfVT: TPdfVTValidationResult;
ValidatePdfVT는 열려 있는 문서를 훑으며 ISO 16612-2:2010이 정의한 파일 형식 수준의 마커를 찾습니다:
pdfvtid:GTS_PDFVTVersion (§6.3 표 2)와 pdfvtid:GTS_PDFVTModDatepdfvtid:GTS_PDFVTModDate와 xmp:ModifyDate의 일치 (§6.3 NOTE 1)pdfxid:GTS_PDFXVersion — PDF/VT-1은 PDF/X-4여야 하고(§6.2.1), PDF/VT-2는 PDF/X-4p, PDF/X-5g, PDF/X-5pg 중 하나의 file-set 베이스를 사용해야 합니다 (§6.2.2)pdfaExtension:schemas 설명/DPartRoot 항목. /DPartRootNode, XML NMTOKEN 호환 /NodeNameList, 부모 링크, /DParts 배열의 배열, 리프 /Start//End 범위, 페이지별 /DPart 참조가 페이지 트리를 깊이 우선 순서로 정확히 한 번씩 덮어야 합니다GTS_XID, GTS_Scope, GTS_Env의 직접 값 유형과 허용 값, Record 범위가 쓰는 간접 DPartRoot RecordLevel, Stream 범위의 PDF/VT-2s 전용 경계가 포함됩니다FlateDecode 페이지 또는 Form XObject 스트림을 디코딩하고, 실효 상속 리소스로 각 Do 피연산자를 해석해 SingleUse 카운트, 리소스 가시성, Record 범위의 단일 수신자 소유권을 강제합니다Intent, 블렌딩 색 공간을 가진 필수 isolated transparency Group, 직접 또는 중첩된 Form 콘텐츠의 optional-content 표시 연산자/DestOutputProfile 또는 외부 /DestOutputProfileRef를 가진 OutputIntent를 참조하는 카탈로그 /OutputIntents 배열/ID 배열과 /Encrypt 부재 (PDF/X는 암호화를 금지합니다)xmp:CreateDate와 xmp:ModifyDate 항목결과는 TPdfVTValidationResult 레코드입니다:
pvc1(PDF/VT-1 마커), pvc2(PDF/VT-2 마커), pvcNone(PDF/VT 마커 없음), 또는 pvcUnknown(마커는 있지만 파일 수준 버전을 인식하지 못함)TPdfVTValidationIssues 집합pvviGtsScopeInvalidValue, pvviGtsScopeRecordWithoutRecordLevel, pvviGtsXidNotUuid, pvviGtsEnvMissing, pvviGtsXidInvalidType, pvviGtsEnvInvalidType, pvviGtsScopeStreamInVT1, pvviGtsScopeSingleUseRepeated, pvviGtsScopeRecordCrossesRecords, pvviGtsResourceNotVisible가 있습니다pvviGtsEncapsulatedInvalidType, pvviGtsEncapsulatedMissingScope, pvviGtsEncapsulatedImageMissingIntent, pvviGtsEncapsulatedGroupInvalid, pvviGtsEncapsulatedOptionalContent가 있습니다Conformance가 실제 PDF/VT 수준이고 Issues가 비어 있으면 True를 반환합니다ValidatePdfVT는 읽기 전용입니다. 파일 형식 마커, 선택된 DPart 트리
의미론, 되풀이 XObject 범위와 캡슐화, PDF/VT-to-PDF/X 베이스의 정확한
짝, 요소로 쓰였든 RDF 속성으로 쓰였든 XMP 속성을 검사합니다. 콘텐츠 수준의
완전한 검증은 PDF/X 프리플라이트 엔진과 짝지어 사용하고, PDF/VT-2라면
InspectPdfVT2sStream이나 다른 완전한 file-set 검증기를
사용하세요. PDF/VT-2s는 MIME 스트림 적합성 수준으로, 버전이 파일 수준의
pdfvtid:GTS_PDFVTVersion 값이 아니라 ISO 16612-2 부록 A의 MIME 스트림
헤더로 신호됩니다
/DPartRoot 계층이 없거나 트리가 §6.5 요구 사항을 어길 때 — 잘못된 /DParts 배열, /Start와 /DParts의 혼용, 자식 소유권 중복, 잘못된 /NodeNameList 이름이나 깊이 불일치, 페이지 트리 순서를 따르지 않는 페이지 범위, /Start를 /End로 반복하는 단일 페이지 범위, 커버하는 리프 DPart를 가리키지 않는 페이지 /DPart 링크 — pvviMissingDPartRoot가 발생합니다FlateDecode 스트림을 훑습니다. 다른 필터나 연쇄 필터를 쓰는 콘텐츠 스트림은 전용 완전 프리플라이트 엔진의 몫으로 남습니다pvviModDateMismatch는 pdfvtid:GTS_PDFVTModDate와 xmp:ModifyDate가 둘 다 존재하고 값이 다를 때만 발생합니다. SaveAsPdfVT는 항상 같은 값으로 씁니다Conformance = pvcUnknown이고 Issues 집합이 빈 레코드를 반환합니다
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;