Как исправить появление «кракозябр» в PDF-файлах, сохраненных из 1С

Системный администратор 1С v8.3 (Обычные формы) 1С:Управление торговлей
← На главную

Проблема некорректного отображения кириллицы при сохранении табличных документов в формат PDF — одна из самых коварных в экосистеме 1С:Предприятие. Особенно часто она проявляется в связке старых версий платформы (8.2) и современных операционных систем, таких как Windows Server 2012 или Windows 10. Пользователи сталкиваются с ситуацией, когда на сервере документ выглядит идеально, но после отправки клиенту превращается в набор нечитаемых символов.

В данной статье мы подробно разберем, почему возникает эта ошибка, проанализируем техническую подоплеку и рассмотрим несколько эффективных способов решения проблемы — от кардинального обновления системы до временных «костылей».

Выясняем причину: почему текст превращается в нечитаемый?

Прежде чем переходить к лечению, давайте разберем «физику» процесса. Основная причина кроется в механизме формирования PDF-контейнера встроенным движком 1С. При сохранении файла платформа создает так называемые Identity-H или CID-шрифты. Проблема заключается в том, что в структуре такого PDF-файла часто отсутствует или некорректно формируется таблица соответствия кодов символов их графическому начертанию — ToUnicode map.

Разберем ситуацию по шагам. Когда программа-просмотрщик (например, Adobe Acrobat Reader) открывает такой файл, она пытается использовать свои внутренние алгоритмы «угадывания» кодировки. Если ей это удается, мы видим нормальный текст. Однако более строгие программы, такие как Foxit Reader, мобильные просмотрщики на iOS/Android или браузеры (Chrome, Safari), четко следуют спецификации PDF. Если таблицы ToUnicode нет, они отображают символы по умолчанию — те самые «кракозябры» или иероглифы.

Ситуация усугубляется на Windows Server 2012, где была существенно изменена работа подсистемы GDI. Платформа 1С версии 8.2 при обращении к системным шрифтам (особенно к Arial версии 6.0 и выше) получает данные, которые не может корректно упаковать в PDF-контейнер. Примечательно, что жирное начертание Arial Bold часто отображается корректно, в то время как обычный Arial «рассыпается».

Решение №1: Обновление платформы (Рекомендуемый метод)

Как показывает практика и опыт многих администраторов, наиболее надежным способом решения проблемы является переход на современную версию платформы. Проанализируем результаты тестов: в версии 8.3.5.1248 и выше разработчики 1С переработали механизм экспорта в PDF, адаптировав его под новые стандарты Windows.

Рассмотрим алгоритм действий:

  1. Выполним резервное копирование информационной базы.
  2. Установим актуальную версию платформы 1С:Предприятие 8.3 (рекомендуется использовать релизы не ниже 8.3.10 для стабильной работы).
  3. Переведем базу в режим работы под новой платформой. Обратите внимание, что даже если ваша конфигурация написана для 8.2 (например, УТ 10.3), она может успешно работать на платформе 8.3 в режиме совместимости.
  4. Протестируем сохранение документа. В большинстве случаев после перехода на 8.3 проблема с кодировкой исчезает навсегда, так как новая платформа корректно внедряет шрифты в документ.

Решение №2: Смена системного шрифта в макетах

Если по каким-то причинам обновление платформы невозможно (например, из-за жестких требований отраслевого решения или кастомных доработок), рассмотрим более гибкий вариант — изменение шрифтов в печатных формах. Исследования показывают, что шрифт Times New Roman гораздо реже подвержен «эффекту кракозябр», чем стандартный Arial.

Для реализации этого метода проделаем следующие шаги:

  1. Зайдем в конфигуратор и найдем нужную печатную форму (макет).
  2. Выделим все ячейки макета (Ctrl+A).
  3. В свойствах изменим шрифт с Arial на Times New Roman.
  4. Сохраним изменения и проверим результат.

Важный нюанс: Этот метод помогает в 80% случаев, но не является панацеей, так как корень проблемы все равно остается в движке генерации PDF.

Решение №3: Использование виртуального PDF-принтера

Рассмотрим ситуацию, когда стандартная функция 1С «Сохранить как PDF» работает некорректно. Мы можем обойти этот механизм, используя внешнее программное обеспечение. Суть метода заключается в том, что вместо сохранения мы отправляем документ на печать, но вместо физического принтера выбираем виртуальный.

Проанализируем преимущества этого подхода:

Решение №4: Настройка реестра Windows (FontSubstitutes)

Иногда проблема кроется в том, как сама операционная система сопоставляет кодировки для шрифтов. Мы можем принудительно указать Windows использовать кириллическую кодировку для шрифта Arial. Разберем, как это сделать через реестр:

  1. Откроем редактор реестра (regedit).
  2. Перейдем в ветку: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes.
  3. Проверим наличие или создадим строковый параметр с именем Arial,0 и значением Arial,204.
  4. Также полезно убедиться, что параметры Arial,1251 настроены правильно, а параметры типа Arial,1252 (западноевропейская кодировка) не перекрывают кириллицу.
  5. После внесения изменений необходимо перезагрузить сервер.

Решение №5: Очистка кэша шрифтов

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

  1. Остановим службу 1С:Предприятия (если работаем в клиент-серверном варианте).
  2. Найдем и удалим файл StaticCache.dat в профилях пользователей 1С на сервере.
  3. Очистим системный кэш Windows. Для этого нужно остановить службу «Служба кэша шрифтов Windows» (Windows Font Cache Service) и удалить файлы с расширением .dat из папки C:\Windows\ServiceProfiles\LocalService\AppData\Local\FontCache.
  4. Перезагрузим систему.

Использование программных методов (для разработчиков)

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


// Пример программной замены шрифта в табличном документе
ТабДок = Новый ТабличныйДокумент;
// ... (здесь идет формирование документа) ...

// Пройдемся по всем областям и заменим шрифт, если платформа 8.2
Для НомерСтроки = 1 По ТабДок.ВысотаТаблицы Цикл
    Для НомерКолонки = 1 По ТабДок.ШиринаТаблицы Цикл
        Область = ТабДок.Область(НомерСтроки, НомерКолонки);
        Если Область.Шрифт.Имя = "Arial" Тогда
            Область.Шрифт = Новый Шрифт("Times New Roman", Область.Шрифт.Размер);
        КонецЕсли;
    КонецЦикла;
КонецЦикла;

ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);

Этот метод позволяет автоматизировать «Решение №2» для всех документов системы без ручной правки сотен макетов в конфигураторе.

Подведем итоги

Мы проанализировали проблему возникновения «кракозябр» при экспорте в PDF и выяснили, что основной виновник — устаревший механизм формирования CID-шрифтов в платформе 8.2. Наиболее эффективным решением остается обновление платформы до версии 8.3. Если же это невозможно, комбинация смены шрифтов в макетах и использования виртуальных PDF-принтеров позволит вам обеспечить клиентов читаемыми документами вне зависимости от их операционной системы и программного обеспечения.

← На главную