При работе в современных конфигурациях, таких как 1С:Комплексная автоматизация 2.4 или 1С:ERP, пользователи часто сталкиваются с неприятной особенностью: обычный счет на оплату при сохранении в формате PDF внезапно начинает «весить» 8–10 мегабайт вместо привычных нескольких сотен килобайт. Ситуация осложняется тем, что это происходит сразу после добавления факсимиле (печати и подписи) в карточку организации.
В этой статье мы подробно разберем, почему встроенный механизм генерации PDF в платформе «1С:Предприятие» так чувствителен к графическим объектам, и проанализируем пошаговый алгоритм оптимизации изображений, который позволит сократить размер документа в несколько раз без потери визуального качества.
Рассмотрим стандартную ситуацию. У нас есть печатная форма без картинок весом 0.7 Мб. Мы добавляем файл факсимиле размером 2 Мб. Логично было бы ожидать, что итоговый документ будет весить около 2.7–3 Мб. Однако на практике мы получаем файл весом в 9 Мб. Почему так происходит?
Проанализируем работу движка платформы 1С. При формировании PDF-документа платформа пытается максимально сохранить качество вставленных объектов. Если исходное изображение имеет огромное разрешение (например, скан в 10 000 пикселей по ширине), 1С встраивает его в структуру PDF, часто пересчитывая данные таким образом, что итоговый поток графических данных (stream) в теле файла значительно превышает размер исходного сжатого JPEG или PNG. По сути, происходит частичное «распаковывание» или использование менее эффективных алгоритмов сжатия ради сохранения четкости при масштабировании.
Как показывает практика, это самый эффективный метод. Разберем его по шагам:
Проанализируем результат: уменьшение картинки с 10 000 до 2 000 пикселей позволяет снизить вес итогового PDF-файла с 9 Мб до приемлемых 1.09 Мб, при этом визуально печать на бумаге останется такой же четкой.
Рассмотрим ситуацию с выбором формата файла. Часто для факсимиле используют формат PNG с прозрачным фоном, чтобы печать красиво «накладывалась» на линии табличного документа. Однако прозрачность — это дополнительный слой данных (альфа-канал), который значительно усложняет структуру PDF.
Посмотрим, что можно сделать:
JPEG. Он не поддерживает прозрачность, но обладает гораздо более эффективными алгоритмами сжатия для фотографических изображений.PNG-8 вместо PNG-24. Это уменьшит количество хранимой информации о цвете, сохранив прозрачность и четкость контуров.Выясним еще одну скрытую причину «тяжелых» документов — избыточную глубину цвета. Скан печати часто сохраняется в режиме 24 или 32 бита (миллионы цветов). Для синей печати и черной подписи такая палитра не нужна.
Рекомендация: Перед загрузкой в 1С переведем изображение в режим 8 бит (256 цветов). Это не повлияет на восприятие документа глазом, но сократит объем данных, которые 1С должна упаковать в PDF. В некоторых случаях допустимо использование даже монохромного режима (1 бит) для подписей, что сделает графику практически невесомой.
Проанализируем, как именно картинка попадает в макет. Существует несколько способов:
BMP или Metafile. Такие объекты практически не сжимаются внутри 1С, что гарантированно приведет к огромному весу PDF.Важное правило: Всегда загружайте графику только через кнопку выбора файла в свойствах картинки макета или в соответствующих полях карточки Организации.
Если вы формируете PDF программно, обратите внимание на параметры метода Записать() для табличного документа. Хотя платформа 1С предоставляет ограниченный контроль над сжатием PDF, начиная с версии 8.3.15 механизмы оптимизации стали работать лучше. Рассмотрим пример кода для сохранения документа:
// Пример сохранения табличного документа в PDF
ТабДок = Новый ТабличныйДокумент;
// ... заполнение документа ...
// Устанавливаем параметры печати, если необходимо
ТабДок.АвтоМасштаб = Истина;
// Записываем файл
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);
Если штатное сохранение все равно выдает слишком большой файл, проанализируем возможность использования внешних компонент или виртуальных PDF-принтеров. Такие инструменты, как Bullzip PDF Printer или библиотеки на базе Ghostscript, позволяют производить пост-сжатие PDF, уменьшая размер изображений непосредственно в процессе формирования файла, что часто дает результат в 2–3 раза лучше, чем встроенный механизм 1С.
Подведем итоги нашего исследования. Чтобы получить легкую печатную форму, необходимо придерживаться следующих правил при подготовке факсимиле:
JPEG для непрозрачных картинок, PNG-8 для прозрачных.Соблюдение этих простых правил позволяет создавать документы, которые легко отправляются по электронной почте и не перегружают серверные хранилища вашей базы данных.