1. Проблема использования нестандартных шрифтов
При работе с табличными документами в 1С иногда возникает необходимость использовать нестандартные шрифты. Например, в одной из моих задач применялся шрифт Myriad Pro. Однако при генерации файла PDF на сервере эти нестандартные шрифты автоматически заменяются на Arial — стандартный шрифт системы. Это приводит к искажению внешнего вида документов и снижает качество итоговых файлов.
Интересно, что при сохранении табличных документов с помощью стандартной кнопки 1С на клиенте, шрифты сохраняются корректно, без замены. Таким образом, проблема проявляется исключительно при серверном формировании PDF-файла.
2. Попытки решения через передачу табличного документа с сервера на клиент
Следующим этапом было решение попытаться сериализовать табличный документ для передачи с сервера на клиент, где сохранить его с уже корректными шрифтами. Но эта попытка не принесла ожидаемого результата.
- Использование методов
ЗначениеВСтрокуВнутр
иЗначениеИзСтрокиВнутр
, которые обычно помогают преобразовать объекты для передачи и восстановления, давало пустой результат. - Попытки применять
СериализаторXDTO
также не увенчались успехом, хотя в документации 1С есть упоминание о поддержке табличных документов. К сожалению, в реальной практике данная методика оказалась неприменимой.
3. Итоговое рабочее решение
После неудач с опциями сериализации, было принято практическое решение преобразовывать табличный документ в двоичные данные на сервере.
- На клиенте эти двоичные данные считывались обратно в объект табличного документа.
- Далее клиентская часть сохраняла табличный документ в PDF с корректным отображением нестандартных шрифтов.
Такой подход позволил обойти ограничения серверной генерации и сохранить визуальное оформление документа без искажения шрифтов.
Вывод
Работа с нестандартными шрифтами в табличных документах 1С при генерации PDF на сервере требует обходных путей из-за встроенных ограничений платформы. Рекомендуется использовать передачу двоичных данных табличного документа на клиент, где происходит окончательное сохранение с правильными шрифтами. Данный метод гарантирует сохранение внешнего вида документа при переносе данных между сервером и клиентом.
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.СохранениеПечатнойФормы") Тогда
Если ВыбранноеЗначение <> Неопределено И ВыбранноеЗначение <> КодВозвратаДиалога.Отмена Тогда
ФайлыВоВременномХранилище = ПоместитьТабличныеДокументыВоВременноеХранилище();
СохранитьПечатныеФормыВПапку(ФайлыВоВременномХранилище, ВыбранноеЗначение.ПапкаДляСохранения);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПоместитьТабличныеДокументыВоВременноеХранилище()
//ваш табличный документ полученный из любого источника на сервере, в примере будет создан новый табличный документ
ИмяДвоичныхДанных = ПолучитьИмяВременногоФайла();
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.Записать(ИмяДвоичныхДанных);
ДвоичныеДанные = Новый ДвоичныеДанные(ИмяДвоичныхДанных);
ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификаторХранилища);
ОписаниеФайла = Новый Структура;
ОписаниеФайла.Вставить("АдресВоВременномХранилище", ПутьВоВременномХранилище);
Возврат ОписаниеФайла;
КонецФункции
&НаКлиенте
Процедура СохранитьПечатныеФормыВПапку(ФайлДляЗаписи, Знач Папка = "")
Данные = ПолучитьИзВременногоХранилища(ФайлДляЗаписи.АдресВоВременномХранилище);
УникальноеИмяФайла = УникальноеИмяФайла("C:\Users\User1C\Downloads\Статья");
ТабличныйДокумент = ПрочитатьТабличныйДокумент(Данные);
ТабличныйДокумент.Записать(УникальноеИмяФайла, ТипФайлаТабличногоДокумента.PDF);
КонецПроцедуры
&НаСервере
Функция ПрочитатьТабличныйДокумент(ДвоичныеДанные)
ИмяДвоичныхДанных = ПолучитьИмяВременногоФайла();
ДвоичныеДанные.Записать(ИмяДвоичныхДанных);
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.Прочитать(ИмяДвоичныхДанных);
Возврат ТабличныйДокумент;
КонецФункции
Вступайте в нашу телеграмм-группу Инфостарт