Внедренные шрифты
Внедрение шрифта — это способ объединения документа и содержащихся в нем шрифтов в файл для передачи на другой компьютер. Внедрение шрифта гарантирует, что шрифт, указанный в передаваемом файле, будет присутствовать на компьютере, получая файл. Однако не все шрифты можно перемещать с компьютера на компьютер, так как большинство шрифтов лицензируются только на одном компьютере за раз. Можно внедрять только шрифты TrueType и OpenType.
Приложения должны внедрять шрифт в документ только по запросу пользователя. Приложение не может распространяться вместе с документами, содержащими внедренные шрифты, и само приложение не может содержать внедренный шрифт. Всякий раз, когда приложение распространяет шрифт в любом формате, необходимо подтвердить права владельца шрифта.
Внедрение шрифтов, в которых внедрение запрещено, может быть нарушением прав собственности поставщика шрифтов или пользовательского лицензионного соглашения, или несоблюдением следующих рекомендаций по внедрению шрифтов. Лицензия шрифта может предоставлять только разрешение на чтение и запись шрифта, который будет установлен и использован на конечном компьютере. Кроме того, лицензия может предоставить разрешение только для чтения. Разрешение только для чтения позволяет конечному компьютеру просматривать и печатать документ (но не изменять); документы со встроенными шрифтами только для чтения сами по себе доступны только для чтения. Внедренные шрифты, доступные только для чтения, не могут быть удалены из документа и установлены на конечном компьютере.
Приложение может определить состояние лицензии, вызвав функцию GetOutlineTextMetrics и проверив член otmfsType структуры OUTLINETEXTMETRIC . Если задан бит 1 otmfsType , внедрение шрифта запрещено. Если бит 1 является ясным, шрифт можно внедрить. Если задан бит 2, внедрение доступно только для чтения.
Чтобы внедрить шрифт TrueType, приложение может использовать функцию GetFontData для чтения файла шрифта. Установка для параметров dwTable и dwOffsetGetFontData значения 0L и параметра cbData в значение 1L гарантирует, что приложение считывает весь файл шрифта с самого начала.
Для внедрения шрифтов OpenType доступно несколько функций в зависимости от ширины символов и расположения данных шрифта. Для внедрения шрифта OpenType в Юникоде, который находится в контексте устройства, приложение может использовать TTEmbedFont. Чтобы внедрить шрифт OpenType UCS-4, который находится в контексте устройства, приложение может использовать TTEmbedFontEx. Чтобы внедрить шрифт OpenType в Юникоде, который находится в файле шрифта, приложение может использовать TTEmbedFontFromFile. Дополнительные сведения о внедрении шрифтов OpenType см. в справочнике по внедрению шрифтов.
После того как приложение получает данные шрифта, оно может хранить данные в документе в любом применимом формате. Большинство приложений создают каталог шрифтов в документе, перечисляя внедренные шрифты и указывая, является ли внедрение только для чтения и записи. Приложение может использовать элементы otmpStyleName и otmFamilyName структуры OUTLINETEXTMETRIC для идентификации шрифта.
Если для внедренного шрифта задан бит только для чтения, приложения должны шифровать данные шрифта перед их сохранением в документе. Метод шифрования не обязательно должен быть сложным; например, использование оператора XOR для объединения данных шрифта с константой, определяемой приложением, является достаточным и быстрым.