import { ORG_LOGOS } from './orgLogos'; /** Логотип для шапки документа: PNG в base64 и его размеры в пикселях (по ним считается пропорция). */ export interface ILetterheadLogo { base64: string; width: number; height: number; } /** Ширина и высота PNG из заголовка IHDR (байты 16–23). */ export function pngSize(base64: string): { width: number; height: number } { const head = atob(base64.slice(0, 44)); const read = (offset: number): number => ((head.charCodeAt(offset) << 24) | (head.charCodeAt(offset + 1) << 16) | (head.charCodeAt(offset + 2) << 8) | head.charCodeAt(offset + 3)) >>> 0; return { width: read(16), height: read(20) }; } /** * Логотип компании — тот же, что в печатной шапке (shared/ui/OrgLetterhead). Логотипы вшиты в бандл, * поэтому у компании, для которой он есть, шапка в документе будет всегда. Нет логотипа у компании * вовсе — undefined, документ уходит без шапки, как и печатается. */ export function letterheadLogoFor(company: string, logos: Record = ORG_LOGOS): ILetterheadLogo | undefined { const dataUri = logos[company]; const prefix = 'data:image/png;base64,'; if (!dataUri?.startsWith(prefix)) return undefined; const base64 = dataUri.slice(prefix.length); return { base64, ...pngSize(base64) }; }