ImageMagick и 1С: от дистрибутива до готового PDF из сканов

· 9 мин

Содержание

Чтобы установить ImageMagick для работы в 1С, скачайте Windows-сборку Q16 с пометкой dll, при установке отметьте флажки Add application directory to your system path и Install legacy utilities (e.g. convert), затем перезапустите 1С. Если код конфигурации обращается к COM-объекту, дополнительно отметьте установку ImageMagickObject и следите, чтобы разрядность ImageMagick совпала с разрядностью клиента 1С.

Чаще всего ImageMagick нужен для одного: сканы складываются в присоединённые файлы картинками, а хочется получить один многостраничный PDF. Без внешней программы 1С этого не делает. Установка занимает минут десять, но три мелочи — разрядность, legacy-утилиты и системный convert.exe — съедают больше времени, чем сама установка.

Какую сборку ImageMagick выбрать под 1С

На странице загрузки ImageMagick для Windows лежит десяток файлов. Они различаются тремя признаками.

ПризнакВариантыЧто брать для 1С
Глубина цветаQ8, Q16, Q16-HDRIQ16: стандарт, хватает для сканов и фото
Разрядностьx86 (32 бит), x64 (64 бит)Как у клиента 1С, если нужен COM. Для вызова из командной строки неважно
Тип сборкиdll, static, portabledll: только в ней есть флажки установщика и, в части версий, COM-объект

Portable-архив не ставится, PATH не трогает и COM-объект не регистрирует. Он годится, только если конфигурация позволяет указать полный путь к исполняемому файлу.

Версия 6 или 7

  • 🔹 ImageMagick 7 — актуальная ветка. Главная команда в ней magick, а старые convert, identify, mogrify появляются, только если при установке отметить legacy-утилиты.
  • 🔹 ImageMagick 6 — прежняя ветка. Команда convert есть сразу. В её Windows-установщиках был флажок регистрации ImageMagickObject (COM).

Если ваша доработка или типовая обработка написана под COM-объект, а в установщике седьмой версии вы не нашли пункта про OLE/COM, ставьте сборку из шестой ветки. Если же 1С вызывает программу через командную строку, хватит седьмой версии с legacy-утилитами.

Какой разрядности клиент 1С

Откройте Справка → О программе в самой 1С. В строке версии платформы указано, 32- или 64-битное приложение запущено. Другой способ — Диспетчер задач: у 32-битного процесса 1cv8c.exe или 1cv8.exe на вкладке «Подробности» в колонке платформы стоит «32 бита».

64-битная Windows не означает 64-битный клиент 1С. На многих рабочих местах до сих пор стоит 32-битная платформа.

Ставим ImageMagick: флажки, которые нельзя пропустить

Запускайте установщик от имени администратора. Мастер обычный, но на экране «Select Additional Tasks» решается, будет ли всё работать.

  1. Примите лицензию и оставьте путь по умолчанию, например C:\Program Files\ImageMagick-7.1.1-Q16. Путь без кириллицы избавит от проблем с кодировкой в командной строке.
  2. На экране дополнительных задач отметьте:
    • ✅ Add application directory to your system path — чтобы magick и convert находились без полного пути;
    • ✅ Install legacy utilities (e.g. convert) — нужен, если 1С вызывает именно convert.exe;
    • ✅ пункт про ImageMagickObject / OLE Control — если он есть в установщике и вам нужен COM.
  3. Завершите установку.
  4. Откройте новое окно командной строки и проверьте:
magick -version
where convert

Первая команда покажет версию и строку Features. Вторая — все найденные convert.exe по порядку. Если первым стоит C:\Windows\System32\convert.exe, это системная утилита Windows для перевода томов FAT в NTFS, а не ImageMagick. О последствиях ниже.

  1. Полностью закройте 1С и запустите заново. Уже открытый процесс видит старую переменную PATH и программу не найдёт.

На терминальном сервере ставьте ImageMagick один раз на сервер, а не каждому пользователю. После правки PATH пользователям достаточно выйти из сеанса и зайти снова.

Нужен ли Ghostscript

Для записи PDF из картинок (JPG, PNG, TIFF → PDF) Ghostscript не нужен. ImageMagick пишет PDF сам.

Ghostscript понадобится, если ImageMagick должен читать PDF: сделать превью первой страницы, разрезать документ на страницы, пересжать готовый PDF. Ставьте Ghostscript той же разрядности, что и ImageMagick.

Регистрация COM-объекта ImageMagickObject

Этот раздел нужен, только если код 1С создаёт объект через Новый COMОбъект. Для вызова через командную строку регистрация не требуется.

Если установщик зарегистрировал объект сам, проверять нечего. Если нет или вы переносили папку вручную, регистрируйте библиотеку ImageMagickObject.dll из каталога установки. Командную строку запускайте от имени администратора.

rem 64-битный ImageMagick для 64-битного клиента 1С
C:\Windows\System32\regsvr32.exe "C:\Program Files\ImageMagick-6.9.13-Q16\ImageMagickObject.dll"

rem 32-битный ImageMagick на 64-битной Windows для 32-битного клиента 1С
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\ImageMagick-6.9.13-Q16\ImageMagickObject.dll"

Номер версии в пути подставьте свой. Путаница с System32 и SysWOW64 — классика: в 64-битной Windows 64-битный regsvr32 лежит в System32, а 32-битный — в SysWOW64.

Удачная регистрация заканчивается окном об успешном вызове DllRegisterServer. Ошибка с кодом 0x80070005 означает, что командная строка запущена без прав администратора.

Быстрая проверка без 1С — скрипт VBScript. Сохраните его как test.vbs и запустите той же разрядности, что и клиент 1С (C:\Windows\SysWOW64\cscript.exe для 32 бит):

Set img = CreateObject("ImageMagickObject.MagickImage.1")
WScript.Echo "COM-объект создан"

Если скрипт отработал, объект виден системе в нужной разрядности.

Подключаем ImageMagick к 1С

Здесь два пути: типовая настройка в конфигурации или собственный код.

Через настройки сканирования в конфигурации

В конфигурациях на Библиотеке стандартных подсистем сканирование вызывается из присоединённых файлов документа или справочника. В форме настроек сканирования есть параметры преобразования в PDF: флажок использования ImageMagick и поле с путём к программе. Точные подписи зависят от версии БСП, поэтому ищите их в форме настроек, которая открывается рядом с командой сканирования.

  1. Откройте любой документ, у которого есть присоединённые файлы.
  2. Откройте настройки сканирования рядом с командой сканирования.
  3. Включите преобразование через ImageMagick и укажите полный путь к convert.exe или magick.exe из папки установки. Полный путь страхует от системного convert.exe.
  4. Выберите формат PDF для многостраничных документов и отсканируйте тестовый лист.

Настройки сканирования хранятся для каждого пользователя и компьютера отдельно. Если сотрудник пересел за другое рабочее место, путь придётся указать ещё раз.

Через командную строку из своего кода

Самый надёжный вариант — вызывать magick.exe напрямую и ждать завершения.

Процедура СобратьPDF(МассивФайлов, ИмяPDF) Экспорт

    ПутьКПрограмме = "C:\Program Files\ImageMagick-7.1.1-Q16\magick.exe";

    Команда = """" + ПутьКПрограмме + """";
    Для Каждого ИмяФайла Из МассивФайлов Цикл
        Команда = Команда + " """ + ИмяФайла + """";
    КонецЦикла;
    Команда = Команда + " -compress jpeg -quality 85 """ + ИмяPDF + """";

    КодВозврата = Неопределено;
    ЗапуститьПриложение(Команда, , Истина, КодВозврата);

    Если КодВозврата <> 0 Тогда
        ВызватьИсключение СтрШаблон("ImageMagick завершился с кодом %1", КодВозврата);
    КонецЕсли;

КонецПроцедуры

Каждый путь обёрнут в кавычки: имена файлов с пробелами без них разваливают команду. Третий параметр Истина заставляет 1С дождаться, пока PDF будет записан, а код возврата показывает, удалось ли это.

Через COM-объект

Magick = Новый COMОбъект("ImageMagickObject.MagickImage.1");
Magick.Convert("C:\Temp\scan1.jpg", "C:\Temp\scan2.jpg", "C:\Temp\result.pdf");

Метод Convert принимает те же аргументы, что и одноимённая команда, только каждый аргумент передаётся отдельным параметром. COM работает в процессе клиента 1С, поэтому разрядности должны совпасть.

СпособКогда подходитСлабые места
Настройки сканирования БСПТиповая конфигурация, задача «сканы в PDF»Путь хранится по пользователю и компьютеру
Командная строкаСвои доработки, клиент и серверНужно аккуратно экранировать пути
COM-объектСтарые доработки, которые уже на нём написаныРазрядность, регистрация, нет в части версий 7

Обработка изображений и сборка PDF: полезные команды

Все примеры — для седьмой версии. В шестой вместо magick пишите convert.

  • 📄 Собрать несколько сканов в один PDF: magick scan1.jpg scan2.jpg scan3.jpg -compress jpeg -quality 85 doc.pdf
  • 📉 Уменьшить фото товара до 1200 точек по длинной стороне: magick photo.jpg -resize 1200x1200 -quality 85 photo_small.jpg
  • ⚫ Сделать чёрно-белый скан документа, который весит в разы меньше: magick scan.png -colorspace Gray -threshold 60% -compress Group4 scan.tif
  • 🔄 Повернуть страницу, отсканированную вверх ногами: magick scan.jpg -rotate 180 scan_ok.jpg
  • 🖼 Превью первой страницы PDF (нужен Ghostscript): magick -density 150 "doc.pdf[0]" preview.png

Сколько весит PDF из сканов

Цветной скан A4 в 300 dpi в JPEG занимает примерно 1–2 МБ на страницу. Десять таких страниц дают PDF на 10–20 МБ, а это уже много для присоединённого файла и для отправки по почте.

Три способа уменьшить размер:

  1. Сканировать документы в 200 dpi вместо 300 — текст читается так же, файл легче примерно вдвое.
  2. Снизить качество JPEG до 75–85 через -quality.
  3. Для текстовых документов без печатей в цвете использовать оттенки серого: -colorspace Gray.

Для договоров с синей печатью и подписями лучше оставить цвет: на сером скане печать сливается с текстом, и отличить оригинал от копии сложнее.

Для проверки результата откройте PDF и посмотрите размер в свойствах присоединённого файла. Если страница весит больше 1 МБ при 200 dpi, проверьте, применился ли параметр -quality: без него ImageMagick берёт качество из исходного JPEG.

Если 1С работает на сервере Linux

Когда преобразование выполняется в серверной процедуре, ImageMagick ставится на сервер 1С, а не на компьютер пользователя. На Linux это пакет из репозитория дистрибутива:

sudo apt install imagemagick ghostscript
convert -version

В пакетах Debian и Ubuntu файл политики /etc/ImageMagick-6/policy.xml часто запрещает работу с PDF. Признак — ошибка:

not authorized 'PDF' @ error/constitute.c/IsCoderAuthorized

Найдите в файле строку с pattern="PDF" и замените rights="none" на rights="read|write". Запрет стоит из соображений безопасности при обработке чужих PDF, поэтому открывайте только PDF и только на сервере, где обрабатываются ваши собственные файлы.

Не меняйте политику на сервере, куда загружаются файлы из интернета.

Серверный процесс 1С работает от служебной учётной записи (usr1cv8 на Linux). У неё должны быть права на запись во временный каталог, куда вы кладёте сканы и результат.

Ошибки при работе ImageMagick из 1С

Диагностика: выберите симптом

Как проверить по шагам, где сломалось

  1. Выполните ту же команду вручную в командной строке под тем же пользователем. Работает — проблема в вызове из 1С, не работает — в установке.
  2. Временно запишите сформированную в 1С строку команды в журнал регистрации или выведите сообщением. Почти всегда видна потерянная кавычка или лишний пробел.
  3. На сервере проверьте права служебной учётной записи на временный каталог.

Частые вопросы

Нужна ли лицензия на ImageMagick для коммерческого использования?
Нет. ImageMagick распространяется бесплатно по собственной открытой лицензии, её можно ставить в организации без оплаты.
Можно ли обойтись без установки на каждый компьютер?
Да, если преобразование выполняется на сервере 1С: тогда программа нужна только на сервере. В файловом варианте и при клиентском вызове её ставят на каждое рабочее место или терминальный сервер.
Как обновить ImageMagick, не сломав 1С?
Новая версия ставится в папку с другим номером. Если в настройках 1С записан полный путь со старым номером, поправьте его после обновления или удаляйте старую версию только после этого.
Почему PDF из ImageMagick не распознаётся как текст?
ImageMagick собирает PDF из картинок, текстового слоя в нём нет. Для поиска по тексту нужна отдельная программа распознавания.
Подойдёт ли сборка Q8, она же меньше весит?
Для сканов и фото товаров подойдёт. Разница с Q16 заметна только при сложной цветокоррекции, а сборки Q16 есть всегда и проверены чаще.