The problem may also be in incomplete (for Cyrillic environment)
FONTCONFIG setup - PS(Type1) fonts instead of proper M$ TTF,
KOI-8R/UTF-8 primary encoding instead of proper ISO10646-1,..
Sme of font issues are described in the "PERSONS" MSE tutorial
(MSEUNIVERSE: \mse\trunk\help\tutorials\db\persons\ru\) - appzs, in
Russian only:
============================
Проверка системы на наличие шрифтов,
используемых MSEgui
Так как MSEgui внутри использует юникод, он может работать в любой
национальной среде ( см. системную переменную "LANG" ), при условии,
что в системе установлены шрифты с кодировкой ISO 10646-1, в которых
представлены символы национального алфавита системы ( см. первую, до
точки, часть значения "LANG", у меня это "ru_RU" ). Опять-таки, проще
всего этого добиться, установив те же "ttf-freefonts".
Для подстраховки по части кодировок лучше импортировать эти шрифты из
сервера шрифтов, так как этот сервер умеет на лету генерировать нужные
кодировки:
установить пакет <<xfstt>> ( сервер TrueType-шрифтов )
в секцию ( /etc/X11/XF86Config-4: Files ) дописать импорт шрифтов из
<<xfstt>> :
FontPath "unix/:7101"
сказать серверу XFSTT , какие кодировки генерировать, для чего в
/etc/init.d/xfstt , в конце секции анализа конфигурации, вписать
строку :
userarg="$userarg --encoding iso8859-1,koi8-r,windows-1251,iso10646-1,symbol-0"
перезапустить <<xfstt>> ( /etc/init.d/xfstt restart ), а затем и все
X11- сессии ( Ctrl+Alt+BackSpace в каждой из сессий )
Примечание:
использование "$userarg" - лишь один из способов ( использованый в
Debian Linux ) для передачи параметров команжной строки в запускаемый
сервер ( демон ) "xfstt", в другом Linux-дистрибутиве может
понадобиться другой способ
параметр "--encoding" задает, шрифты в каких кодировках сгенерировать,
причем каждый шрифт занимает память, поэтому будем минималистами -
зададим минимально необходимый набор кодировок для отображения
стандартных X11-программ ( iso8859-1 ), стандартно русифицированных
программ ( koi8-r), MSEgui-программ ( iso10646-1 ) и символов вроде
стрелок, курсоров и и т.п. ( symbol-0 ); кодировка "windows-1251"
здесь - на случай чтения русских MSWord-файлов в среде
OpenOffice/StarOffice/KWord
<<xfstt>> при запуске ищет TrueType-шрифты в каталоге и подкаталогах
"/usr/share/fonts/truetype/*" - находит, строит кэш, генерирует
кодировки и подгружает - независимо от базовой конфигурации X11.
Поэтому добавить другой комплект TTF-шрифтов просто - скопируйте,
например, шрифты от MicroSoft - в каталог
"/usr/share/fonts/truetype/microsoft/", и выполните в нем команды
<<mkfontscale `pwd`>>, <<mkfontdir `pwd`>> и <<fс-cache `pwd`>> ( эти
команды нужны, чтобы информация о новых шрифтах стала доступна для
"X11" и "FreeType" ).
Прямая ссылка на "/usr/share/fonts/truetype/ "( и подкаталоги ) в
(/etc/X11/XF86Config-4: Files ) может быть удалена.
Несколько слов о печати
В Линуксе для печати из GUI -приложений используeтся "GhostScript" -
просто потому, что он умеет переводить полученные задания в формате PS
( PostScript ) на <<язык>> конкретного принтера (не обязательно
поддерживающего PS ).
Чтобы использовать одни и те же шрифты для отображения и печати -
нужно сказать "GhostScript" , где находятся отображаемые шрифты.
Команда печати выглядит примерно так:
сat <file_to_print>.ps | \
gs -I/usr/share/fonts/truetype/ -q -sDEVICE=epson -dBATCH -dNOPAUSE -dSAFER \
-sOutputFile=- - | lpr -Plp
где:
"сat <file_to_print>.ps" - может быть заменено потоком данных для
распечатки (в формате PS )
"-I/usr/share/fonts/truetype/" - нужно, если в файле печати есть
ссылки на шрифты из этого каталога (и его подкаталогов)
"-sDEVICE=epson" - переводить в формат для распечатки на 9-игольчатом
принтере системы команд "Epson"
( список поддерживаемых принтеров можно узнать командой <<gs --help>>,
см. <<Available devices>> )
"lp -Plp" - печатать через LPD/LPRng-спулер, у которого использовать
очередь печати "lp", которая, кстати не должна делать прогон страницы
( PS -файл обычно содержит такую команду)
Местоположение TrueType -шрифтов можно также указать через
"~/.bash_profile", добавив строку:
export GS_FONTPATH=/usr/share/fonts/truetype/: $GS_FONTPATH
Кстати , GhostScript сам просканирует подкаталоги
<</usr/share/fonts/truetype/*>> в поиске шрифтов .
Но просто информации о каталоге недостаточно, чтобы GhostScript смог
использовать TTF -шрифты, ведь он не понимает их имена. Придется
использовать алиасы - см. файл
/usr/share/gs[-afpl,-esp]/<ver>/lib/Fontmap.GS
Пример скрипта для автоматизации рутинной задачи генерации алиасов (
причем эти алиасы должны соответствоать аналогичным в "FreeType" -
иначе будут расхождения вида на экране и на бумаге ) - см. в архиве
xft2gs.tgz, файл "do_xft.sh". В этом архиве также находятся :
Fontmap.GS.xft - сгенерированный этим скриптом фрагмент для добавления
в "Fontmap.GS" на вашем рабочем месте
fonts.conf - файл конфигурации "FreeType" ( /etc/fonts/fonts.conf ), с
добавлением алиаса для шрифта "fixed" ( используется в "MSEide" )
Запускать "do_xft.sh" ( и включать новое содержимое "Fontmap.GS.xft" в
"Fontmap.GS" ) следует после изменения в секциях "<alias>..< prefer>"
файла "/etc/fonts/fonts.conf".
Правило - если алиасы в файле "Fontmap.GS" пересекаются (
переопределяются ), то задействуется самый последний вариант.
Настройки ( через переменные внутри файла ) по умолчанию "do_xft.sh"
достаточны даже для того, чтобы "GhostScript" понимал разные варианты
именования некоторых шрифтов, например - "Times", "Times New", "Times
New Roman", "TimesNew Roman", "TimesNewRoman" - все будут одинаковым
образом обработаны, если реально представлены одним и тем же файлом
шрифта. Но работает этот
механизм не всегда, и слава богу - лучше всегда знать, какой шрифт
реально используется, поэтому
единственно надежный способ задания имени шрифта - его точная нотация,
с соблюдением всех пробелов и регистра букв
- настоятельно Вам рекомендую всегда делать именно так ( точные
названия шрифтов, понимаемые "GhostScript" - см. левый столбец в файле
"Fontmap.GS" ).
Также, с этими настройками не нужно добавлять "export GS_FONTPATH=.."
в ваш "~/.bash_profile" (см. выше ), так как будут использованы полные
пути к файлам шрифтов.
Запускать "do_xft.sh" следует от имени пользователя, который будет
реально печатать ( чтобы учесть его собственные шрифты - в домашнем
каталоге ) , а уже добавлять к "Fontmap.GS" придется, став
суперпользователем ( root ) . Также, данный скрипт подразумевает
использование TrueType-шрифтов.
Опять-таки - почему использовать в PostScript не привычные PS
(Type1-шрифты), а именно TrueType ( TTF ) ? Просто потому, что
TTF-шрифты содержат в себе начертания символов практически всех
европейских языков, нужно лишь сказать <<используй такой-то код для
начертания такой-то буквы>> . Задания печати ( в формате PS ),
генерируемые MSEgui компонентом <<tpostscriptprinter>>, содержат в себе
таблицы перекодировки - что позволяет распечатать практически любые (
хоть китайские - лишь бы были в шрифте ! ) символы, вне зависимости от
системной кодировки.
Общее правило при подготовке печати - всегда указывайте в программе
максимально детализированное имя шрифты - "Times New Roman" и т.п.,
чтобы потом, из-за возможных различий в алиасах шрифтов, не получилось
расхождений при печати той же информации на другом рабочем месте.
Легче установить на другом рабочем месте нужный шрифт, чем возиться с
алиасами !
Примечания :
Поведение "GhostScript" при получении неправильного или неизвестного
имени шрифта, или когда файл шрифта недоступен на файловой системе -
неоднозначно. Он может прекратить работу, а может и продолжить,
заменив неверный шрифт на умолчание, как правило - шрифт "Helvetica" (
если шрифт по-умолчанию доступен, то, как правило - происходит 2-й
вариант )
Формат названия шрифта, генерируемого "MSEgui" в заданиях для печати :
{font name with spaces and correct letter casing}[-[Bold[Italic]]
где :
tprintercanvas.font.name: => {font name with spaces and correct letter casing}
tprintercanvas.font.style:= [fs_bold, fs_italic] => [-[Bold[Italic]]
и именно для такого формата ( "Times New Roman-BoldItalic", и т.п. ) в
файле "Fontmap.GS" должны быть подготовлены корректные алиасы.
Какие шрифты по умолчанию используют MSEgui-программы ? Комплект
"Fixed", "Helvetica", "Sans", "Serif", "Courier New" и "Mono",
назначенный группе встроенных ( stock ) объектов, доступных каждому
MSEgui-приложению .
При заказе шрифтов библиотека "FreeType" обращается к своему партнеру
- библиотеке "FontConfig", которая, в свою очередь, анализирует
системные настройки шрифтов - файл "/etc/fonts/fonts.conf" .
В этом файле нас интересуют секции :
A. Безусловная замена шрифта :
<!--
Accept deprecated 'mono' alias, replacing it with 'monospace'
-->
<match target="pattern">
<test qual="any" name="family">
<string>mono</string>
</test>
<edit name="family" mode="assign">
<string>monospace</string>
</edit>
</match>
То есть вместо шрифта "Mono" следует искать шрифт "Monospace".
!!! Сразу вслед этой секцией - добавим запись, ожидаемую "MSEide" :
<match target="pattern">
<test qual="any" name="family">
<string>fixed</string>
</test>
<edit name="family" mode="assign">
<string>monospace</string>
</edit>
</match>
Это будет алиас для шрифта "fixed".
<!--
Accept alternate 'sans serif' spelling, replacing it with 'sans-serif'
-->
<match target="pattern">
<test qual="any" name="family">
<string>sans serif</string>
</test>
<edit name="family" mode="assign">
<string>sans-serif</string>
</edit>
</match>
То есть вместо шрифта "sans serif" следует искать шрифт "sans-serif".
<!--
Accept deprecated 'sans' alias, replacing it with 'sans-serif'
-->
<match target="pattern">
<test qual="any" name="family">
<string>sans</string>
</test>
<edit name="family" mode="assign">
<string>sans-serif</string>
</edit>
</match>
То есть вместо шрифта "sans" следует искать опять-таки шрифт "sans-serif".
B. Варианты, в порядке убывания предпочтения
<!--
Provide required aliases for standard names
-->
<alias>
<family>serif</family>
<prefer>
<family>Bitstream Vera Serif</family>
<family>Times New Roman</family>
...
<family>Nimbus Roman No9 L</family>
<family>Times</family>
...
<family>FreeSerif</family>
</prefer>
</alias>
То есть при нескольких вариантах выбора шрифта "serif" - начинать с
"Bitstream Vera Serif" ( комплект "fonts-bitstream" ), затем - "Times
New Roman" ( шрифт от "MicroSoft" ), "Nimbus Roman No9 L" (Type1-шрифт
от "Adobe", входит в комплект GhostScript ), "Times" ( bitmap-шрифт их
комплекта XWindows) и "FreeSerif " (шрифт из комплекта "ttf-freefont"
) .
<alias>
<family>sans-serif</family>
<prefer>
<family>Bitstream Vera Sans</family>
<family>Verdana</family>
<family>Arial</family>
...
<family>Nimbus Sans L</family>
<family>Helvetica</family>
...
<family>FreeSans</family>
</prefer>
</alias>
То есть при нескольких вариантах выбора шрифта "sans-serif" - начинать
с "Bitstream Vera Sans" ( комплект "fonts-bitstream" ), затем -
"Verdana" и "Arial" ( шрифты от "MicroSoft" ), "Nimbus Sans L"
(Type1-шрифт от "Adobe", входит в комплект GhostScript ), "Helvetica"
( bitmap-шрифт их комплекта XWindows) и "FreeSans" (шрифт из комплекта
"ttf-freefont" ) .
<alias>
<family>monospace</family>
<prefer>
<family>Bitstream Vera Sans Mono</family>
<family>Andale Mono</family>
<family>Courier New</family>
...
<family>Nimbus Mono L</family>
<family>Courier</family>
...
<family>FreeMono</family>
</prefer>
</alias>
То есть при нескольких вариантах выбора шрифта "monospace" - начинать
с "Bitstream Vera Sans Mono" ( комплект "fonts-bitstream" ), затем -
"Andale Mono" и "Courier New" ( шрифты от "MicroSoft" ), "Nimbus Mono
L" ( Type1-шрифт от "Adobe", входит в комплект GhostScript ),
"Courier" ( bitmap-шрифт их комплекта XWindows) и "FreeMono" (шрифт из
комплекта "ttf-freefont" ) .
То есть, если в системе установлены все вышеперечисленные комплекты
шрифтов, то шрифты "ttf-freefont" останутся незадействованными. Шрифты
"fonts-bitstream" на системе с русской локалью будут отсечены из-за их
базового языка ( lang=en ) , следовательно - будут задействованы
MicroSoft-шрифты.
Если мы хотим, чтобы в "MSEgui" ( и прочих программах,
ориентированных на "FreeType" ) были задействованы шрифты
"ttf-freefont", придется вручную переместить строку
"<family>FreeSerif</family>" выше строки "<family>Times New
Roman</family>", и так далее для остальных шрифтов.
Кстати, скрипт "do_xft.sh" ( см. выше ) принимает в рассчет данный
приоритет шрифтов и для самых приоритетных шрифтов создает самые
короткие алиасы .
Примечание :
если Вы работаете в Win-32 и установили "GhostScript + GV", версии для
"Windows", Вам все равно потребуется файл "Fontmap" ( "Fontmap.GS", но
с убранным расширением ), который должен находиться в каталоге
"${WINDIR}/Fonts/". Содержимое данного файла придется генерировать в
Linux, включив каталог "${WINDIR}/Fonts/" в список каталогов шрифтов
"Linux"
в "Fontmap" информацию о путях к файлам шрифтов придется удалить -
либо вручную, либо подправив внутреннюю переменную "SHORTPATHS"
скрипта "do_xft.sh", установив ее в "1"
никто не заставляет ставить ни "Microsoft", ни "FreeFont" шрифты -
вполне можно обойтись Type1-шрифтами от "Adobe", да еще при том, что
для них подходит неизмененный "Fontmap.gs" ;
но в этих шрифтах намного меньше кодировок и символов, нужна возня с
X11-алиасами для нормальной работы не-FreeType программ, и т.д.,
короче, по моему опыту - много ненужной возни ;
если в системе установлены Type1-шрифты, то они безусловно захватывают
на себя FreeType-алиасы "Times", "Helvetica" и "Courier " , что может
создать нестыковку с модифицированным "Fontmap.GS" ; чтобы это
предотвратить, удалите из "/etc/fonts/fonts.conf" следующую секцию :
<!--
URW provides metric and shape compatible fonts for these 3 Adobe families
Mark these as effective replacements by binding the replacement
family names strongly
-->
<match target="pattern">
<test name="family"><string>Times</string></test>
<edit name="family" mode="append" binding="same">
<string>Nimbus Roman No9 L</string>
</edit>
</match>
<match target="pattern">
<test name="family"><string>Helvetica</string></test>
<edit name="family" mode="append" binding="same">
<string>Nimbus Sans L</string>
</edit>
</match>
<match target="pattern">
<test name="family"><string>Courier</string></test>
<edit name="family" mode="append" binding="same">
<string>Nimbus Mono L</string>
</edit>
</match>
и перезапусите X11 ( чтобы изменения "fonts.conf" ) вступили в действие.
Может встать вопрос - какой комплект TrueType-шрифтов следует выбрать
- "FreeFonts", "MicroSoft", "BitStream" и т.п. ? А может вообще
ограничиться Type1-шрифтами ( *.pfa/pfb). Могу только сослаться на
собственный опыт :
шрифты от MicroSoft дают прекрасные отпечатки и на больших, и на
малых размерах, практически не требуют подстройки параметров
FreeType-библиотеки ( см. ниже ), однако при том же заданом размере
шрифты отображают несколько укрупненные литеры, нормально это или нет
- неизвестно, можно поэкперименировать с DPI-параметром (96..120) в
настройках XFSTT-сервера
прочие шрифты - для нормального вида требуют донастройки FreeType-библиотеки :
чтобы убрать цветные ореолы -> включить "autihinting" -> создать линк :
"/etc/fonts/conf.d/32-autohint.conf", указывающий на
"/etc/fonts/conf.d/autohint.conf"
чтобы повысить резкость прорисовки -> включить субпиксельную
отрисовку пикселов -> создать линк :
"/etc/fonts/conf.d/31-sub-pixel.conf", указывающий на
"/etc/fonts/conf.d/sub-pixel.conf "
Параметр "rgb" в этом файле определяет порядок (слева направо) цветов
в цветовых триадах, образующих отдельные пикселы, и может отличаться в
разных моделях мониторов. Виден под лупой, имеет наибольший эффект для
монитров с триадами, расположенными в одну линию - например,
жидокристалиических. Если реальный порядок цветов отличается от "rgb",
можно его указать в этом параметре.
И все равно мелкие ( < 8 ) размеры шрифтов могут прорисовываться с
разрывами, особено если включена субпиксельная прорисовка
Примечания :
Чтобы немасштабируемые ( не-TrueType/Type1 ) шрифты не вклинились в
список шрифтов и не помешали бы выбору корректного масштабируемого
шрифта, можно исключить их не-TrueType/Type1-шрифты из обработки в
FreeType-библиотеке :
создать линк "/etc/fonts/conf.d/30-no-bitmap.conf", указывающий на
"/etc/fonts/conf.d/no-bitmap.conf"
Файлы в каталоге "/etc/fonts/conf.d/*" будут обработаны в порядке
возрастания цифр в начале имени ( цифры не должны повторяться, без
цифр - вообще не будет обработан )
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
mseide-msegui-talk mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk