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 проверяет 128-байтовый заголовок, объявленный размер файла, подпись acsp, количество компонентов цветового пространства, ограниченное количество тегов, протяжённость таблицы тегов и каждый диапазон данных тегов, прежде чем открывать метаданные
Результат включает сырые четырёхбайтовые подписи версии и цветового пространства, отображаемые значения, количество компонентов и тегов, идентификатор профиля, MD5 полного файла, SHA-256, класс устройства, PCS и первое корректное описание профиля
Общий инспектор распознаёт подписи GRAY, RGB, CMYK и 2CLR–FCLR; валидаторы конкретных форматов могут накладывать более узкую политику процессных цветов
PdfIccProfileDescriptionMatches проверяет значение desc версии 2 либо каждую ограниченную запись локали в profileDescriptionTag mluc версии 4
| Limit | Default | Purpose |
|---|---|---|
MaxProfileBytes | 64 MiB | Останавливает разбор и хэширование чрезмерно больших профилей |
MaxTagCount | 4096 | Ограничивает обход таблицы тегов |
TPdfIccProfileInfo.IsValid истинно, только когда множество проблем пусто