TPdfIccProfileLimits = record
MaxProfileBytes: Int64;
MaxTagCount: Integer;
class function Default: TPdfIccProfileLimits; static;
end;
TPdfIccProfileIssue = (ipiTooLarge, ipiHeaderTruncated, ipiSizeMismatch, ipiSignatureInvalid, ipiUnsupportedColorSpace, ipiTagCountExceeded, ipiTagTableTruncated, ipiTagDataOutOfBounds);
TPdfIccProfileIssues = set of TPdfIccProfileIssue;
TPdfIccProfileInfo = record
Issues: TPdfIccProfileIssues;
ByteSize: Int64;
DeclaredSize: Int64;
Version: string;
VersionBytes: AnsiString;
DeviceClass: string;
DataColorSpace: string;
DataColorSpaceSignature: AnsiString;
Pcs: string;
ComponentCount: Integer;
TagCount: Integer;
Md5: string;
Sha256: string;
ProfileId: string;
ProfileDescription: string;
function IsValid: Boolean;
end;
function InspectPdfIccProfile(const Data: TBytes): TPdfIccProfileInfo;
function InspectPdfIccProfile(const Data: TBytes;
const Limits: TPdfIccProfileLimits): TPdfIccProfileInfo;
function PdfIccProfileDescriptionMatches(const Data: TBytes;
const Expected: string): Boolean;
InspectPdfIccProfile validiert den 128-Byte-Header, die deklarierte Dateigröße, die acsp-Signatur, die Komponentenzahl des Farbraums, die begrenzte Tag-Anzahl, die Tag-Tabellenausdehnung und jeden Tag-Datenbereich, bevor Metadaten offengelegt werden
Das Ergebnis umfasst rohe Vier-Byte-Versionen und Farbraum-Signaturen, Anzeigewerte, Komponenten- und Tag-Zählungen, Profil-ID, MD5 der vollständigen Datei, SHA-256, Geräteklasse, PCS und die erste gültige Profilbeschreibung
GRAY-, RGB-, CMYK- und 2CLR- bis FCLR-Signaturen werden vom allgemeinen Inspektor erkannt; formatspezifische Validatoren können eine engere Prozessfarben-Richtlinie verhängen
PdfIccProfileDescriptionMatches prüft den v2-desc-Wert oder jeden begrenzten Locale-Eintrag in einer v4-mluc-profileDescriptionTag
| Grenzwert | Standard | Zweck |
|---|---|---|
MaxProfileBytes | 64 MiB | Stoppt Parsen und Hashing übergroßer Profile |
MaxTagCount | 4096 | Begrenzt den Durchlauf durch die Tag-Tabelle |
TPdfIccProfileInfo.IsValid ist nur True, wenn die Problem-Menge leer ist