gifts2017

Правильная установка шрифта средствами 1С

Опубликовал Александр Медведев (anig99) в раздел Программирование - Практика программирования

Как правильно установить шрифт средствами 1С, а не просто копированием.

Если просто копировать файл шрифта в системную папку windows, то потом его нельзя использовать. Есть способ из 1С установить шрифт штатным образом. Источник https://www.cloudtec.ch/blog/tech/install-font-command-line-script-windows-7.html и http://www.cyberforum.ru/assembler/thread455807.html.

Ниже приведен код для обработки, где в макете сохранён шрифт code128.ttf в виде двоичных данных. Но метод подойдет для любых шрифтов, которые должны устанавливаться штатными средствами.

 

СистемнаяИнформация = Новый СистемнаяИнформация; 
ВерсияОС = СистемнаяИнформация.ВерсияОС;
ИмяФайла = "code128.ttf";
Макет = ПолучитьМакет("Макет");
Если Найти(ВерсияОС, "Microsoft Windows XP") = 0 Тогда
	objShell = Новый COMОбъект("Shell.Application");
	Каталог = КаталогВременныхФайлов();
	ПолноеИмяФайла = Каталог + ИмяФайла;
	Макет.Записать(ПолноеИмяФайла);
	objNameSpace = objShell.Namespace(Каталог);
	objFont 	 = objNameSpace.ParseName(ИмяФайла);
	objFont.InvokeVerb("Install");
	objFont = Неопределено;
	УдалитьФайлы(ПолноеИмяФайла);
Иначе
	WshShell 	= Новый COMОбъект("WScript.Shell");
	FSO 	 	= Новый COMОбъект("Scripting.FileSystemObject");
	ПутьШрифты 	= wshShell.SpecialFolders.Item("Fonts");
	ПолноеИмяФайла = ПутьШрифты + "\" + ИмяФайла;
	Макет.Записать(ПолноеИмяФайла);
	WshShell.Run("RunDll32.exe gdi32.dll,AddFontResourceA " + FSO.GetBaseName(ПолноеИмяФайла));
КонецЕсли;

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Анянов Михаил (insurgut) 13.05.15 14:29
В коде сразу и ответ: средствами 1С - никак %) Но с точки зрения пользователя ему все-равно, каким именно образом будет установлен шрифт, а с точки зрения программиста - отличное решение, чтобы конфигурация включала в себя сам шрифт и могла его "налету" устанавливать.
2. Алексей Р. (miniogn) 13.05.15 15:23
В слову,в некоторых типовых встроен код установки шрифтов.
Пользователю не всегда удастся установить шрифт, т.к. могут отсутствовать права.
Dmitryiv; +1 Ответить
3. Сергей Сытько (8SiriuS8) 13.05.15 18:28
Решение неплохое. Но также нужно не забывать проверять безопасно а можно ли пользователю создать COM объект и можно ли ему выполнить инсталляцию, так как если прав нету то 1С выпадет в ошибку
4. Александр Медведев (anig99) 13.05.15 22:21
(3) 8SiriuS8, у меня не с одним пользователем в стандартной УПП проблем не возникло
5. Роман Уничкин (unichkin) 13.05.15 23:09
6. Сергей Афонькин (killovolt) 14.05.15 07:58
(5) unichkin, под Linux на базе Debian (Ubuntu, Mint) надо копировать шрифт в папку /usr/share/fonts, но у пользователя должны быть соответствующие права, вернее это можно сделать только под правами root.
Dmitryiv; unichkin; +2 Ответить
7. Сергей Сытько (8SiriuS8) 14.05.15 22:14
(4) Видимо в вашей сети админы не используют AppLocker и не делают повышенные ограничения для пользователей
8. Александр Медведев (anig99) 15.05.15 07:59
(7) 8SiriuS8, если в сети используются серверные возможности по управлению, то шрифты на все компьютеры можно установить и через них.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа