Нечасто, но регулярно у людей возникает вопрос — как изменить имя шрифта. Не файла со шрифтом (тут хитрости нет), а самого шрифта. Имя, которое будет показываться в диалоге шрифтов текстовых процессоров после установки данного.

Я столкнулся с этой проблемой следующим образом. Требовалось на домашнем компьютере сконвертировать набор документов из САПР «Компас» в формат PDF. Для этой цели имелся КОМПАС-3D Viewer. А затык вышел с тем, что автор документов набрал их шрифтом Arial Narrow, который на компьютере отсутствовал; вместо него смотрелка подставляет шрифт Arial, из-за чего все надписи в документе разъезжаются как попало.

Конечно, мы все знаем, как можно решить проблему с отсутствующим шрифтом, да и с редактором Компаса. Но есть у меня скверная привычка не нарушать авторские права без крайней необходимости, потому стал искать законное и относительно честное решение. В компьютере стоял свободный шрифт Liberation Sans Narrow (TrueType), который очень похож на Arial Narrow, а главное, имеет те же метрики. Надо было лишь убедить систему (речь идёт о Windows Vista), что точно такой же шрифт зовут Arial Narrow, только и всего.

Во-первых, достаём искомые шрифты (LiberationSansNarrow.ttf, LiberationSansNarrow-Bold.ttf, LiberationSansNarrow-Italic.ttf, LiberationSansNarrow-BoldItalic.ttf) из C:\Windows\Fonts в произвольную папку. По названному пути в действительности расположен специальный файл, а не папка, и что-то с его содержимым делать сто?ит только через Проводник Windows: скопировали файлы мышкой, поправили, и мышкой же положили обратно.

Наиболее простой способ сделать что-либо со шрифтом — это скачать и установить FontForge, редактор шрифтов с графическим интерфейсом. Если вам не лень скачать программу-установщик, то дальше можете не читать — всё элементарно. Но я решил, что дистрибутив графического продукта (весит чуть более 16 Мб) мне выкачать тяжело — инет небыстрый; и перешёл к другим вариантам (не факт, что я поступил разумно, ну да из песни слова не выкинешь).

Утилитой для работы со шрифтами из командной строки является TTX из проекта FontTools. В архивах интернета водится его .exe-установщик, однако полученную из него программу мне запустить не удалось, так что скачал с официального сайта архив tar.gz (весит всего-то 340 Кб). Для сборки утилиты из этого архива вам понадобится:
  1. Python — язык программирования. У меня он был настроен в составе среды Cygwin, в консоли которого я и делал всё дальнейшее, так что его мне качать не надо было. Предположительно, Cygwin для сборки не обязателен, но в любом случае удобен.
  2. Библиотека Numerical Python — неизвестно почему требуется для сборки. Архив весит около 4,3 Мб. Возможно, вы сможете установить её без сложностей через стандартный установщик Cygwin.


Итак, порядок действий (для чайников, знакомые со сборкой из кодов могут особо не вчитываться):
  1. Распаковываем архив numpy-x.x.x.zip в какую-нибудь папку и переходим туда в консоли командой cd "D:/путь/куда/распаковали/numpy-x.x.x" (в оболочке Cygwin следует использовать /прямые/ косые черты вместо \обратных\).
  2. Выполняем команду python setup.py install. Далее вы в течении получаса-часа будете получать ругань компилятора, однако библиотека, скорее всего, в итоге успешно установится.
  3. Теперь распаковываем куда-либо архив fonttools-….tar.gz, и опять переходим в добытую папку и вызываем python setup.py install. Установка на этот раз завершится довольно скоро, а утилита ttx станет доступной из командной строки.
  4. Переходим в каталог, куда мы скопировали файлы со шрифтами. Выполняем команду: ttx *.ttf, после которой для каждого TrueType-шрифта в папке возникнет файл с расширением .ttx. Исходные файлы теперь можно удалить (вы ведь их скопировали, а не переместили?)
  5. TTX-файлы — это обычные текстовые файлы в формате XML. Открываем их в любом текстовом редакторе и меняем всё, что нужно; в моём случае требовалось лишь заменить везде «LiberationSans» и «Liberation Sans» на Arial.
  6. Вновь запускаем утилиту, дабы вернуть файлы в скомпилированный вид: ttx *.ttx. Возникает набор файлов, аналогичный исходному, но с другим внутренним именем.
  7. Переименовываем файлы, дабы избежать конфликтов (неважно во что, лишь бы у вас таких шрифтов не было). Для этой цели можно использовать программу Free Font Renamer, которая переименовывает все файлы в папке во внутренние имена шрифтов. Обращаю внимание, что менять содержимое файлов эта программа не умеет — внутренние имена шрифтов она только читает, а потому не особо нужна (я скачал её раньше, поскольку ждал от неё большего).

Всё, мы получили файлы, которые можно закидывать мышкой в псевдокаталог Fonts. Со шрифтаме OpenType всё делается аналогично с учётом замены на 4-м шаге .ttf на .otf.

P.S. Замечу, что ранее мне удалось переименовать OpenSymbol в StarSymbol, не пользуясь никакими тяжеловесными закачками. Для этого файл пропускался через простенький скрипт, содержавший регулярное выражение наподобие s/O([\x00-\x1F]?)p([\x00-\x1F]?)e([\x00-\x1F]?)n/S$1t$2a$3r/g. Однако не поручусь, что этот трюк всегда срабатывает, особенно когда длины имён не совпадают.

Комментарии (1)


  1. mitry
    08.04.2015 11:48

    А в Висте FontSubstitutes в реестре не работает? Раньше там можно было подменять шрифты.