Почему при сохранении печатной формы в PDF вместо картинок появляются кресты, и как это исправить?

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

Многие разработчики сталкиваются с неприятной ситуацией при разработке печатных форм, особенно в расширениях конфигурации. Представим сценарий: мы создали красивую печатную форму, взяв за основу корректный пример внешней печатной формы на БСП 3.1.10, добавили туда логотип, факсимиле подписи и печати. В режиме предварительного просмотра в 1С всё выглядит идеально. Сохраняем в Excel (XLSX) — тоже всё отлично. Но как только пользователь нажимает «Сохранить как...» и выбирает формат PDF, открытый файл встречает нас красными или черными перечеркнутыми квадратами (крестами) вместо изображений.

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

Анализ проблемы: почему 1С рисует «крест»?

Появление креста (placeholder) вместо изображения — это не ошибка отсутствия файла. Это сигнал о том, что внутренний механизм конвертации 1С «видит» объект картинки, но не может корректно декодировать его бинарные данные для встраивания в структуру PDF-файла. Это часто случается, когда выполняется генерация QR и штрихкодов для печатных форм или вставка сложных логотипов. В отличие от Excel, где картинка просто вставляется как объект, PDF требует более строгой обработки графических потоков.

Давайте проанализируем основные причины, по которым это происходит, опираясь на практику и особенности платформы.

Причина 1: Некорректный формат или избыточный размер изображения

В исходной ситуации упоминается использование формата PNG и достаточно большого размера файла (1.41 МБ для подписи). Это одна из самых частых причин сбоя.

1. Проблема с PNG и прозрачностью

Встроенный PDF-конвертер платформы 1С (особенно в версиях 8.3.14 – 8.3.18) чувствителен к структуре PNG-файлов. Если картинка сохранена с использованием интерлейсинга (Interlacing/Чересстрочная развертка) или имеет сложный альфа-канал, конвертер может не справиться с рендерингом. Для подготовки "чистых" изображений может потребоваться автоматизация обработки фотографий и графики через GraphicsMagick, что позволит убрать лишние параметры из файлов.

2. Проблема размера и DPI

Файл подписи размером 1.41 МБ — это критически много для макета. Когда 1С формирует печатную форму, она часто разжимает изображение в памяти. Картинка с высоким разрешением, сжатая визуально до маленького прямоугольника на макете, требует огромных ресурсов GDI при конвертации. Внутреннему буферу может просто не хватить памяти для обработки.

Решение: Оптимизация графики

  1. Откройте исходные файлы картинок в графическом редакторе.
  2. Уменьшите физический размер изображения до тех размеров, в которых оно будет выводиться на печать (например, 300x150 пикселей). Разрешение установите 96 DPI — это стандарт для форм 1С.
  3. Если используете PNG, пересохраните его без интерлейсинга.
  4. Если прозрачность не критична (фон документа белый), попробуйте пересохранить изображение в формате JPG. JPG обрабатывается PDF-конвертером гораздо стабильнее.
  5. Если прозрачность нужна (для печати поверх текста), попробуйте формат GIF с одним прозрачным цветом.

Причина 2: Способ размещения картинки в макете

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

При сохранении в PDF на сервере платформа иногда теряет контекст расширения и не может извлечь бинарные данные картинки из макета, если она вставлена как объект поверх ячеек.

Решение: Использование картинки в ячейке или программный вывод

Давайте рассмотрим альтернативный способ размещения — «Картинка в ячейке». Этот метод более надежен для табличных документов.

  1. В макете выделите нужную область ячеек (объедините их).
  2. В свойствах ячейки найдите поле Картинка.
  3. Выберите вашу картинку из библиотеки.
  4. Установите свойство РазмещениеКартинки в значение Пропорционально или Растянуть.

Если статический вывод не помогает, наиболее надежным способом является программный вывод картинки в момент формирования печатной формы. Вместо того чтобы хранить картинку нарисованной в макете, мы будем вставлять её кодом.

Рассмотрим пример кода, как это сделать:


// Получаем область макета, где должна быть картинка
ОбластьМакета = Макет.ПолучитьОбласть("Подвал");

// Если картинка хранится в макете как двоичные данные или в библиотеке картинок
// Создаем объект Картинка
МояКартинка = БиблиотекаКартинок.ПодписьГенеральногоДиректора; // Или из хранилища

// Создаем рисунок в табличном документе программно
Рисунок = ОбластьМакета.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = МояКартинка;
Рисунок.Верх = 5; // Координаты в пунктах
Рисунок.Лево = 10;
Рисунок.Ширина = 40;
Рисунок.Высота = 20;
Рисунок.РазмерКартинки = РазмерКартинки.Пропорционально;

// Выводим область
ТабличныйДокумент.Вывести(ОбластьМакета);

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

Причина 3: Версия платформы и драйверы

Мы выяснили, что версия платформы 8.3.18 имеет подтвержденные проблемы (баги) с подсистемой печати и генерации PDF, связанные с переходом на новые библиотеки рендеринга. Если оптимизация картинок не помогает, проблема может быть в самом движке платформы. В таких случаях разработчики часто используют методы работы с PDF без внешних компонентов, чтобы самостоятельно управлять процессом сохранения и масштабирования.

Решение: Обновление и проверка окружения

  1. Попробуйте обновить платформу до более свежего релиза (например, 8.3.20 и выше), где механизм PDF был доработан.
  2. Проверьте драйвер принтера, установленного «по умолчанию» в операционной системе. Механизм формирования табличного документа 1С (WYSIWYG) зависит от метрик драйвера текущего принтера. Попробуйте сменить принтер по умолчанию на виртуальный (например, Microsoft XPS Document Writer) и проверьте сохранение.

Различие методов: «Сохранить как» против «Печать в PDF»

Важно понимать разницу между двумя действиями, которые приводят к созданию PDF-файла. Это знание поможет вам найти временное решение (workaround), если исправить код прямо сейчас невозможно.

Если при использовании метода «Печать на PDF-принтер» кресты исчезают и картинки отображаются корректно, это на 100% подтверждает, что проблема кроется во внутреннем алгоритме конвертации 1С.

Резюме по шагам исправления

Подводя итог, если вы столкнулись с «крестами» в PDF, действуйте в следующем порядке:

  1. Оптимизируйте картинки: Уменьшите размер файла (до 50-200 КБ), удалите интерлейсинг, попробуйте формат JPG.
  2. Измените метод вставки: Используйте картинку в ячейке или вставляйте её программно через код при формировании печатной формы.
  3. Проверьте платформу: Если проблема массовая и не решается картинками, рассмотрите обновление платформы 1С.
  4. Используйте обходной путь: Печатайте на виртуальный PDF-принтер средствами Windows.
← На главную