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 시그니처, 색 공간 성분 수, 상한이 적용된 태그 수, 태그 테이블 범위, 모든 태그 데이터 범위를 검증합니다
결과에는 4바이트 raw 버전과 색 공간 시그니처, 표시 값, 성분·태그 수, 프로필 ID, 전체 파일의 MD5, SHA-256, 디바이스 클래스, PCS, 첫 유효 프로필 설명이 담깁니다
범용 검사기는 GRAY, RGB, CMYK, 2CLR부터 FCLR까지의 시그니처를 인식합니다. 형식별 검증기는 더 좁은 프로세스 색 정책을 적용할 수 있습니다
PdfIccProfileDescriptionMatches는 v2 desc 값을 검사하거나 v4 mluc profileDescriptionTag의 상한이 적용된 모든 locale 레코드를 검사합니다
| Limit | Default | Purpose |
|---|---|---|
MaxProfileBytes | 64 MiB | 지나치게 큰 프로필의 파싱과 해싱을 멈춥니다 |
MaxTagCount | 4096 | 태그 테이블 순회에 상한을 둡니다 |
TPdfIccProfileInfo.IsValid는 문제 집합이 비어 있을 때만 True입니다