При выгрузке отчетов, печатных форм или других табличных документов из 1С в формат PDF пользователи иногда сталкиваются с визуальным дефектом: латинские буквы, цифры или знаки препинания наезжают на кириллический текст (например, в строках вида ПП.RU.001MT). В результате итоговый документ становится нечитаемым. Разберем детально, почему возникает такое смещение символов и какими способами можно устранить эту проблему.
Проанализируем техническую сторону формирования PDF-файлов платформой 1С:Предприятие. В версиях платформы 8.3.8 и 8.3.9 разработчиками был существенно переработан встроенный механизм экспорта документов для расширения поддержки международных стандартов и различных языковых наборов.
В процессе модификации движка рендеринга возникла внутренняя ошибка в алгоритме двунаправленного вывода текста (BiDi) и расчета координат смещения глифов (символов). Когда в одной ячейке табличного документа встречается составная строка, включающая одновременно русские буквы, знаки препинания (точки, дефисы) и латиницу, парсер некорректно вычисляет ширину подстроки и сбрасывает начальную горизонтальную позицию курсора. В результате следующая часть текста начинает отрисовываться поверх уже выведенных символов. Фирмой «1С» данная проблема была официально зарегистрирована под кодом 10177995.
Дополнительными факторами, усугубляющими проблему, могут выступать:
Записать() на стороне сервера под управлением Linux, где при отсутствии нужных системных шрифтов задействуются шрифты подстановки (fallback fonts) с отличающимися размерами символов.Рассмотрим основной и наиболее надежный метод устранения дефекта. Поскольку ошибка заложена непосредственно в бинарном коде встроенного конвертера платформы, радикальным решением является переход на релиз, где алгоритм позиционирования символов был исправлен.
Ошибка 10177995 была полностью устранена начиная с версии платформы 8.3.10.2299. В более поздних сборках веток 8.3.10, 8.3.11 и всех последующих современных релизах экспорт смешанных строк вида ПП.RU.001MT выполняется штатно. Если инфраструктура позволяет, рекомендуется выполнить плановое обновление платформы до актуального стабильного релиза.
Если оперативно обновить технологическую платформу невозможно, применим обходные пути на уровне макета печатной формы:
Arial, Tahoma или Verdana).Разберем программные и инфраструктурные способы обхода встроенного конвертера PDF, если ошибка проявляется в эксплуатируемой конфигурации:
&НаКлиенте.XLSX или MXL с последующим преобразованием в PDF через внешние библиотеки или офисные пакеты.Посмотрим на пример программного сохранения табличного документа во внешнем коде:
// Пример сохранения табличного документа в PDF
ТабДок = Новый ТабличныйДокумент;
// ... Заполнение макета и данных ...
ТабДок.Записать(ПутьКФайлуPDF, ТипФайлаТабличногоДокумента.PDF);
Таким образом, для полного избавления от наложения латинских и русских букв оптимальным шагом является обновление платформы 1С:Предприятие до версии не ниже 8.3.10.2299, либо временное разделение проблемных полей в макете печатной формы.