Почему при сохранении табличного документа 1С в PDF накладываются английские и русские буквы?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При выгрузке отчетов, печатных форм или других табличных документов из 1С в формат PDF пользователи иногда сталкиваются с визуальным дефектом: латинские буквы, цифры или знаки препинания наезжают на кириллический текст (например, в строках вида ПП.RU.001MT). В результате итоговый документ становится нечитаемым. Разберем детально, почему возникает такое смещение символов и какими способами можно устранить эту проблему.

Причины некорректного экспорта текста в PDF

Проанализируем техническую сторону формирования PDF-файлов платформой 1С:Предприятие. В версиях платформы 8.3.8 и 8.3.9 разработчиками был существенно переработан встроенный механизм экспорта документов для расширения поддержки международных стандартов и различных языковых наборов.

В процессе модификации движка рендеринга возникла внутренняя ошибка в алгоритме двунаправленного вывода текста (BiDi) и расчета координат смещения глифов (символов). Когда в одной ячейке табличного документа встречается составная строка, включающая одновременно русские буквы, знаки препинания (точки, дефисы) и латиницу, парсер некорректно вычисляет ширину подстроки и сбрасывает начальную горизонтальную позицию курсора. В результате следующая часть текста начинает отрисовываться поверх уже выведенных символов. Фирмой «1С» данная проблема была официально зарегистрирована под кодом 10177995.

Дополнительными факторами, усугубляющими проблему, могут выступать:

  1. Нестандартные шрифты: использование OpenType-шрифтов или начертаний, для которых у платформы отсутствуют полные таблицы метрик.
  2. Контекст формирования: выполнение метода Записать() на стороне сервера под управлением Linux, где при отсутствии нужных системных шрифтов задействуются шрифты подстановки (fallback fonts) с отличающимися размерами символов.

Способ 1. Обновление технологической платформы 1С

Рассмотрим основной и наиболее надежный метод устранения дефекта. Поскольку ошибка заложена непосредственно в бинарном коде встроенного конвертера платформы, радикальным решением является переход на релиз, где алгоритм позиционирования символов был исправлен.

Ошибка 10177995 была полностью устранена начиная с версии платформы 8.3.10.2299. В более поздних сборках веток 8.3.10, 8.3.11 и всех последующих современных релизах экспорт смешанных строк вида ПП.RU.001MT выполняется штатно. Если инфраструктура позволяет, рекомендуется выполнить плановое обновление платформы до актуального стабильного релиза.

Способ 2. Корректировка макета и шрифтов

Если оперативно обновить технологическую платформу невозможно, применим обходные пути на уровне макета печатной формы:

  1. Использование стандартных шрифтов: заменим используемый шрифт ячейки на базовый TrueType-шрифт, поддерживаемый операционной системой без искажения метрик (например, Arial, Tahoma или Verdana).
  2. Разделение составного текста по колонкам: если в ячейке выводится составной код или артикул, разделим его формирование в макете на несколько смежных независимых ячеек (отдельно русскоязычный префикс, отдельно латинский идентификатор). При таком подходе координаты каждой ячейки вычисляются изолированно, и наложения не происходит.
  3. Добавление явных пробелов: в некоторых случаях устранить сбой парсера помогает добавление пробелов вокруг точек и специальных символов при программном заполнении параметров макета.

Способ 3. Использование альтернативных механизмов выгрузки

Разберем программные и инфраструктурные способы обхода встроенного конвертера PDF, если ошибка проявляется в эксплуатируемой конфигурации:

  1. Печать через виртуальный PDF-принтер: отправка табличного документа на печать через виртуальный принтер операционной системы (например, Microsoft Print to PDF или PDFCreator). В этом сценарии за растеризацию текста и расчет позиций символов отвечает графическая подсистема ОС, в которой описанный сбой отсутствует.
  2. Формирование на клиенте: если запись документа в PDF выполняется в серверном коде или фоновом задании, перенесем сохранение в клиентский контекст с помощью интерактивных методов или директивы &НаКлиенте.
  3. Промежуточная конвертация: программное сохранение табличного документа во временный файл формата XLSX или MXL с последующим преобразованием в PDF через внешние библиотеки или офисные пакеты.

Посмотрим на пример программного сохранения табличного документа во внешнем коде:


// Пример сохранения табличного документа в PDF
ТабДок = Новый ТабличныйДокумент;
// ... Заполнение макета и данных ...
ТабДок.Записать(ПутьКФайлуPDF, ТипФайлаТабличногоДокумента.PDF);

Таким образом, для полного избавления от наложения латинских и русских букв оптимальным шагом является обновление платформы 1С:Предприятие до версии не ниже 8.3.10.2299, либо временное разделение проблемных полей в макете печатной формы.

← На главную