База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как встроенному в 1С PDF viewer задать шрифт из C:WindowsFonts? › Ответ в теме: Как встроенному в 1С PDF viewer задать шрифт из C:WindowsFonts?
Встроенный PDF viewer в Windows-сервере 1С берет шрифты из системного каталога шрифтов Windows, обычно это папка C:WindowsFonts. Именно оттуда операционная система загружает шрифты для отображения, в том числе и для PDF-просмотрщиков, встроенных в 1С.
Если PDF-документ отображается с ошибками в шрифтах, скорее всего, нужный шрифт либо не установлен в системе, либо установлен некорректно, либо PDF использует нестандартный или встроенный шрифт, который не может быть корректно отрисован.
Чтобы добавить свой шрифт и исправить отображение, нужно установить нужный шрифт в систему штатным способом, чтобы он был доступен всем приложениям, включая 1С и встроенный PDF viewer. Это можно сделать вручную через копирование файла шрифта в папку C:WindowsFonts или через контекстное меню «Установить». Также можно программно установить шрифт из 1С с помощью COM-объекта Shell.Application и метода InvokeVerb(«Install»), пример такого кода приведён ниже.
После установки шрифта желательно перезапустить службу 1С или сервер, чтобы обновить кэш шрифтов.
Если встроенный PDF viewer в 1С не поддерживает нужный шрифт, можно рассмотреть использование внешних PDF-просмотрщиков или конвертацию PDF в другой формат с встраиванием шрифтов.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
СистемнаяИнформация = Новый СистемнаяИнформация; ВерсияОС = СистемнаяИнформация.ВерсияОС; ИмяФайла = "MyFont.ttf"; Макет = ПолучитьМакет("МакетШрифта"); // макет с двоичными данными шрифта Если СтрНайти(ВерсияОС, "Microsoft Windows XP") = 0 Тогда Каталог = ВременныеФайлы.КаталогВременныхФайлов(); ПолноеИмяФайла = Каталог + ИмяФайла; Макет.Записать(ПолноеИмяФайла); // В Unix-клиенте COMОбъекты недоступны, альтернативу реализовать отдельно при необходимости УдалитьФайлы(ПолноеИмяФайла); Иначе WshShell = Новый COMОбъект("WScript.Shell"); FSO = Новый COMОбъект("Scripting.FileSystemObject"); ПутьШрифты = WshShell.SpecialFolders.Item("Fonts"); ПолноеИмяФайла = ПутьШрифты + "" + ИмяФайла; Макет.Записать(ПолноеИмяФайла); WshShell.Run("RunDll32.exe gdi32.dll,AddFontResourceA " + FSO.GetBaseName(ПолноеИмяФайла)); КонецЕсли; |