function ValidatePdfR: TPdfRValidationResult;
ValidatePdfR går igenom det öppna dokumentet och letar efter de filformatsmarkörer som definieras av ISO 23504-1:2020:
%PDF-raster-x.y med versionsidentifiering nära slutet av filen (§5)%PDF-1.4, %PDF-1.5, %PDF-1.6 eller %PDF-1.7 (§6.2.2) för okrypterade filer, eller %PDF-2.0 (§6.2.3) för krypterade filer/Type /ObjStm — §6.2.4)pvriProhibitedCatalogEntry)pvriProhibitedInfoEntry)/ID-arrayResultatet är ett TPdfRValidationResult-record:
prc1 (PDF/R-1-markör hittad), prcNone (ingen markör) eller prcUnknown (parsing misslyckades eller dokumentet är inaktivt)TPdfRValidationIssues-mängd med noll eller flera värden: pvriMissingVersionMarker, pvriBadHeader, pvriObjStmPresent, pvriProhibitedCatalogEntry, pvriProhibitedInfoEntry, pvriInfoXmpMismatch, pvriMissingXmpMetadata, pvriMissingTrailerIdValidatePdfR är en skrivskyddad inspektion av filformatet. PDF/R-1-överensstämmelse har strikta strukturella krav som den här metoden inte kontrollerar — per-page Contents-struktur, MediaBox-form, tillåtna filter, indirekta referenser med generation noll, strip layout. Para ihop med en PDF/R-validator från TWAIN Working Group för dessa kontroller på innehållsnivå
%PDF-raster- som en delsträng var som helst i filen. ISO 23504-1 §5 anger att markören placeras mellan trailer-dictionaryn och startxref, men valideraren accepterar andra placeringar för att vara förlåtande mot något icke-standardiserade generatorerConformance = prcUnknown och en tom Issues-mängd%PDF-2.0-header), så valideraren flaggar inte trailer-nyckeln /Encrypt som en icke-överensstämmelse. Käll-PDF:er krypterade under PDF 1.x skulle ändå fallera på grund av headerkontrollen
uses System.TypInfo;
var
Outcome: TPdfRValidationResult;
Issue: TPdfRValidationIssue;
begin
Pdf1.FileName := 'C:\Incoming\scan.pdf';
Pdf1.Active := True;
Outcome := Pdf1.ValidatePdfR;
Memo1.Lines.Add('Level: ' + GetEnumName(TypeInfo(TPdfRConformance),
Ord(Outcome.Conformance)));
for Issue in Outcome.Issues do
Memo1.Lines.Add('- ' + GetEnumName(TypeInfo(TPdfRValidationIssue), Ord(Issue)));
end;