Статьи здесь

Выступления здесь

Использование True Type шрифтов в Microsoft Office 97

Виктор Галактионов

Весной этого года Microsoft выпустила очередную локализованную версию своего продукта Office 97. С переходом на новую версию появились проблемы использования прежних TrueType шрифтов, оставшихся в наследство от Windows 3.x. И многие задавались одним и тем же вопросом: неужели Microsoft не заметила такой очевидный недочет, за которым не нужно далеко ходить, он лежит на поверхности. В этой статье проясняется ситуация с использованием True Type шрифтов в Microsoft Office 97.

Если разобраться более детально, то никаких ошибок в работе в Microsoft Office 97 нет. Все работает именно так, как и задумано. Мы имеем дело с одним из тех немногих случаев, когда Microsoft отказалась от старого догматичного подхода во имя нового перспективного решения ценой потери совместимости.

История кодовых таблиц

Первые персональные компьютеры появились более четверти века назад и были ориентированы на текстовый вывод информации. Известно, что для представления символов использовались их числовые эквиваленты – коды символов. По началу применялось 7-битная кодировка, которая могла представить 128 символов. Тогда же и был выработан стандарт ASCII – единая таблица соответствия кодов и самих символов. Позже она была расширена до 8 бит (256 символов) и дошла в таком виде практически до сегодняшнего дня. При этом первая половина (символы 0-127) были всегда одни и те же, соответствующие стандарту ASCII, а вторая половина таблицы (символы 128-255) менялась в зависимости от страны, где она использовалась. Есть варианты второй половины для европейских символов, греческих и др. Существует с десяток русских вариантов (всем до боли знакомые ГОСТовская, альтернативная, КОИ-8 и пр.), в которых одному и тому же коду (к примеру, 192) может соответствовать множество различных по начертанию символов, в зависимости от того, какая таблица кодировки используется. По этой причине для каждой кодовой таблицы создавались свои шрифты, правильно отображающие символы в строгом соответствии с их кодами. Текст, набранный в кодировке КОИ-8, при использовании шрифта, разработанного для альтернативной ДОС кодировки, прочитать не удастся. Это известно практически всем и проявляется в частности в отдельной проблеме – использования русского шрифта в электронных письмах.

С развитием компьютерной индустрии и с выходом программных продуктов за границы использования только английского языка возникла необходимость убрать путаницу в представлении символов. К этому подталкивало и бурное развитие Internet. Были предложены многочисленные варианты решения данной проблемы. Одна из них получила массовое признание – стандарт Unicode. Этот стандарт оговаривает кодирование символов не одним байтом (256 символов), а двумя, что дает возможность представить одновременно до 65536 символов. Этот стандарт оговаривает строгое расположение символов, использующихся в странах мира, в таблице кодировки. первые 128 символов, как и следовало ожидать, остались теми же, что и в ASCII - цифры, знаки препинания, буква латинского алфавита. Для русских букв выделено место с шестнадцатеричными кодами от 401h до 458h. Есть также места и для греческих, арабских, японских и тибетских знаков.

Стандарт Unicode был поддержан Microsoft при выпуске Windows 95. Поставляемые в ее составе шрифты Arial, Courier New, Times New Roman содержат уже не 256 символов, как это было в прежних шрифтах, а около 700. Конечно, не все символы из Unicode реализованы в этих шрифтах. В панъевропейской и русской версиях эти шрифты содержат символы европейских стран (включая кириллицу).

В Windows 3.x для одновременного использования русских и, скажем, специфических немецких или французских символов использовались два различных шрифта - один для кириллицы, другой для немецких или французских символов. Зачастую эти шрифты разрабатывались разными производителями и немного отличались начертанием. Всем известный случай, когда вы пишите в заголовке статьи "a-излучение" и используете для греческого символа a (альфа) шрифт Symbol, в то время когда все остальное набирается гарнитурой Академическая. В этом случае «альфа» будет смотреться как белая ворона на фоне остальных символов. И ничего с этим сделать нельзя, нет другого шрифта, кроме Symbol.

Особенности использования Unicode

С выходом Windows 95 ситуация немного изменилась к лучшему. теперь в Unicode шрифтах, поставляемых к примеру в составе с Windows 95, есть и необходимые нам символы греческого алфавита и кириллица. Поэтому все слово будет выглядеть ровно. Однако старые программы не умели работать с символами с двухбайтным кодированием. Для обхода этой трудности были введены в систему "виртуальные" шрифты, типа Arial CE, Arial Cyr, Arial Greek и т.д. На самом деле этих шрифтов нет на самом деле, они все берутся из одного и того же Arial и задаются в файле WIN.INI примерно следующим образом:

[FontSubstitutes]

Arial Cyr,204=Arial,204

Arial CE,238=Arial,238

Courier New Cyr,204=Courier New,204

Courier New CE,238=Courier New,238

Times New Roman Cyr,204=Times New Roman,204

Times New Roman CE,238=Times New Roman,238

Здесь числа 204 и 238 обозначают не что иное, как кодовую таблицу. 204 – это кирилличная раскладка, 238 – центpальноевpопейская и т.д. Таким образом, для программ Arial Cyr – это шрифт, содержащий 256 символов, во второй половине которого находятся русские буквы. В Arial CE на этом месте стоят европейские символы подобные Ã (А с тильдой) или ē (e со штрихом).

Однако использовать такой вариант по-прежнему не очень удобно – для того, чтобы переключиться на греческую таблицу нужно выбрать другой шрифт. В случае необходимости поменять шрифт Arial на Times New Roman придется по всему тексту вылавливать Arial CE и менять его на Times New Roman CE, а Arial Cyr в свою очередь на Times New Roman Cyr и т.д.

При разработке Office 97 компания Microsoft пошла немного другим путем, на полпути к которому уже был WordPad из Windows 95. Теперь все символы, будь они греческими или кирилличными, считаются одним шрифтом, а соответствующий выбор кодовой страницы происходит в зависимости от языка, в котором находится клавиатура при наборе этих символов. Если переключиться в русскую раскладку, то при наборе можно увидеть русские буквы (Unicode 401h-458h). При наборе во французской раскладке тех же символов автоматически будут появляться французские (Unicode 0C0h-0FFh). Это намного удобнее и быстрее.

При этом для смены шрифта достаточно выделить весь текст и вместо Arial присвоить Times New Roman. И все буквы, и русские, и греческие, и французские останутся самими собой в новом шрифте, т.к. теперь все символы в Office 97 кодируются 2 байтами сразу в кодировке Unicode, в отличие от предыдущих версий Microsoft Office. Скорее всего, именно это послужило, основной причиной того, что Microsoft изменила заголовок файлов .DOC, сделав их тем самым полностью несовместимым с предыдущими версиями. Да и что бы можно было увидеть, открыв документ Word 97, к примеру, в Word 6?

Все это прекрасно работает, пока используются шрифты, разработанные с учетом Unicode стандарта. А как же быть со «старыми» True Type шрифтами? Оказывается, с ними так просто работать не получается. Причина заключается в том, что, как я уже говорил раньше, старые шрифты TrueType (да и Type 1) имели всего по 256 символов (а то и меньше). И коды этих символов были соответственно от 0 до 255. По стандарту Unicode в диапазоне 0-255 находятся цифры, знаки пунктуации, символы латинского алфавита, а так же символы центральноевропейских стран. При открытии документа, набранного старым шрифтом, например TimesET, в Word 95, новый редактор Word 97 считает, что это европейские символы, а не русские. Но вот только шрифт TimesET сделан так, что на месте этих самых французских, немецких и пр. символов стоят русские. Посему документы, открытые Word 97 отображаются на экране правильно. Если же вы хотите дописать рядышком несколько русских символов, то вместо них Word 97 начнет рисовать квадратики. Потому, что он начинает воспринимать введенные буквы как русские, а не европейские, и выводить символы с кодами после 401h. По причине того, что в шрифте TimesET нет символов с кодом больше 255, то вместо этих несуществующих символов и отображается символ по умолчанию (обычно это белый прямоугольник с рамкой). Для проверки достаточно выделить импортированный русский текст из Word 95 вместе с вновь введенными квадратиками и присвоить ему шрифт Arial. Русские буквы станут французскими, немецкими и какими угодно, а прямоугольники – русскими.

Варианты решения

Вариант 1. Самым простым и честным решением представляется использование шрифтов Unicode. Однако пока отечественные компании, занимающиеся разработкой шрифтов, не выпустят новые версии своих шрифтов, этот вариант вряд ли приемлем. Хотя уже сегодня многие и зарубежные компании, например, AG Group, начали выпускать Unicode-шрифты, а значит содержащие и кириллицу. Некоторые из таких шрифтов поставляются вместе с CorelDraw в разделе "Шрифты Windows 95".

Вариант 2. «Подправить» имеющиеся шрифты. Для этого нужно перенести символы с кодами 0C0h-0FFh в область, начиная с кода 401h. Такие "подправленные" шрифты конечно не будут содержать греческих и других символов, но с кириллицей проблем не будет. Отрицательным моментом этого варианта является нарушение лицензионного соглашения с производителем шрифта, дающего право использования шрифта, но запрещающего любые его модификации. Кроме этого при пересылке кому-либо своего документа, он с большой степенью уверенности не будет прочитан, если в документ не будет при сохранении внедрен этот шрифт (опция «внедрять шрифты True Type» закладка «Сохранение» в режиме «Сервис|Параметры…»).

Вариант 3. Заключается в том, чтобы «обмануть» Office 97 и подсовывать ему русские буквы под видом европейских. Для этого нужно в Windows 95 удалить русскую и, если есть, другие, типа украинской, белорусской и пр., раскладки клавиатуры. Затем следует поставить европейские клавиатуры, скажем, французскую, немецкую и т.д. При этом нужно изменить их раскладку на русскую, украинскую и т.д. (режим «Настройка|Панель управления», «Клавиатура», закладка «Свойства» позволяет сменить раскладку символов имеющейся клавиатуры). Таким образом, при наборе на французской клавиатуре с русской раскладкой Word 97 будет генерировать коды символов в диапазоне до 255, что не будет выходить за пределы имеющихся символов в шрифтах типа TimesET, Pragmatica и др. Отрицательным моментом при этом, конечно, является исключение возможности работы с Unicode шрифтами. Хотя для работы с ними при необходимости можно оставить и родную русскую клавиатуру. Кроме этого, при наборе на такой «фpанцузско-pусской» клавиатуре Word 97 автоматически будет присваивать французский язык набираемым словам, что не даст использовать режим автоматической проверки правописания (spellchecker).

С описанных позиций представляется понятным принятое компанией Microsoft решение. После появления достаточного количество Unicode шрифтов работать с текстами на разных языках станет гораздо проще, чем сейчас.

Последнее обновление 15.08.2007
 

 
Рейтинг@Mail.ru   Rambler's Top100    

Яндекс цитирования  
</div> </body> <!-- InstanceEnd --></html>