При работе с печатными формами в 1С:Предприятие часто возникает неприятная ситуация: табличный документ, содержащий графические элементы, при сохранении в формат PDF значительно теряет в четкости. Эта проблема носит системный характер и связана с тем, как платформа обрабатывает растровые данные при конвертации. Давайте разберем, почему это происходит и какими способами мы можем минимизировать потерю качества.
Когда мы вызываем метод Записать у объекта ТабличныйДокумент с указанием типа PDF, встроенный конвертер платформы выполняет ряд операций по оптимизации файла. В процессе этой трансформации 1С приводит графические объекты к определенному разрешению (DPI). Если исходное изображение имеет высокое разрешение, алгоритм сжатия платформы снижает его, чтобы уменьшить размер итогового файла. В результате мы получаем «замыленную» картинку с артефактами сжатия.
Один из самых надежных способов получить PDF «как есть» — это не использовать штатный метод сохранения платформы, а воспользоваться виртуальным принтером. Печать через такой инструмент позволяет передать на формирование документа данные в том виде, в котором их видит подсистема печати Windows, минуя внутренние алгоритмы сжатия 1С.
Рассмотрим, как это реализовать:
Записать используйте объект ТабличныйДокумент и метод Напечатать, предварительно установив имя принтера через свойство ИмяПринтера.Важно: Этот метод наиболее эффективен в клиент-серверном варианте работы, так как настройка принтера на сервере делает решение доступным для всех пользователей системы.
В ходе практических экспериментов было выяснено, что внутренняя конвертация по-разному реагирует на разные форматы исходных графических файлов. Если вы используете PNG с прозрачностью, попробуйте изменить подход:
BMP. Хотя этот формат значительно увеличивает объем документа, он не использует сжатие с потерями, что позволяет платформе при конвертации в PDF работать с «чистыми» данными пикселей.ТочностьПечати у вашего ТабличногоДокумента. Установка значения ТочностьПечати.Точная иногда помогает платформе корректнее распределять элементы по сетке документа, хотя это не является панацеей для растровой графики.Если бизнес-задача требует идеального качества, рекомендуем перенести формирование PDF на уровень серверных компонентов. Вместо того чтобы полагаться на встроенные возможности 1С, вы можете сохранять табличный документ в промежуточный формат, а затем использовать консольные утилиты для конвертации в высококачественный PDF.
Пример логики работы:
// Сохраняем макет в промежуточный файл
ТабДокумент.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.MXL);
// Выполняем внешнюю команду для конвертации на сервере
КомандаСистемы("converter.exe " + ПутьКФайлу + " --output " + ПутьКPdf + " --quality 100");
Такой подход дает полный контроль над параметрами сжатия и глубиной цвета. Мы рекомендуем использовать специализированные библиотеки или утилиты, которые поддерживают сохранение графики без пересжатия (например, с использованием алгоритма LZW или JPEG с качеством 100%).
Чтобы снизить вероятность потери качества, обратите внимание на следующие моменты:
Подводя итог, можно сказать, что идеального «одной кнопкой» решения внутри платформы не существует, так как 1С в первую очередь ориентирована на скорость работы и компактность, а не на полиграфическое качество графики. Однако, используя комбинацию из виртуальных принтеров или конвертации исходников в BMP, мы можем добиться приемлемого для бизнеса результата.