ImageMagick и 1С: от дистрибутива до готового PDF из сканов
Содержание
Чтобы установить 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-HDRI | Q16: стандарт, хватает для сканов и фото |
| Разрядность | x86 (32 бит), x64 (64 бит) | Как у клиента 1С, если нужен COM. Для вызова из командной строки неважно |
| Тип сборки | dll, static, portable | dll: только в ней есть флажки установщика и, в части версий, 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» решается, будет ли всё работать.
- Примите лицензию и оставьте путь по умолчанию, например
C:\Program Files\ImageMagick-7.1.1-Q16. Путь без кириллицы избавит от проблем с кодировкой в командной строке. - На экране дополнительных задач отметьте:
- ✅
Add application directory to your system path— чтобыmagickиconvertнаходились без полного пути; - ✅
Install legacy utilities (e.g. convert)— нужен, если 1С вызывает именноconvert.exe; - ✅ пункт про ImageMagickObject / OLE Control — если он есть в установщике и вам нужен COM.
- ✅
- Завершите установку.
- Откройте новое окно командной строки и проверьте:
magick -version
where convert
Первая команда покажет версию и строку Features. Вторая — все найденные convert.exe по порядку. Если первым стоит C:\Windows\System32\convert.exe, это системная утилита Windows для перевода томов FAT в NTFS, а не ImageMagick. О последствиях ниже.
- Полностью закройте 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 и поле с путём к программе. Точные подписи зависят от версии БСП, поэтому ищите их в форме настроек, которая открывается рядом с командой сканирования.
- Откройте любой документ, у которого есть присоединённые файлы.
- Откройте настройки сканирования рядом с командой сканирования.
- Включите преобразование через ImageMagick и укажите полный путь к
convert.exeилиmagick.exeиз папки установки. Полный путь страхует от системногоconvert.exe. - Выберите формат 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 МБ, а это уже много для присоединённого файла и для отправки по почте.
Три способа уменьшить размер:
- Сканировать документы в 200 dpi вместо 300 — текст читается так же, файл легче примерно вдвое.
- Снизить качество JPEG до 75–85 через
-quality. - Для текстовых документов без печатей в цвете использовать оттенки серого:
-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С
C:\Windows\System32\convert.exe, а не ImageMagick. Укажите в 1С полный путь к convert.exe или magick.exe из папки установки.Как проверить по шагам, где сломалось
- Выполните ту же команду вручную в командной строке под тем же пользователем. Работает — проблема в вызове из 1С, не работает — в установке.
- Временно запишите сформированную в 1С строку команды в журнал регистрации или выведите сообщением. Почти всегда видна потерянная кавычка или лишний пробел.
- На сервере проверьте права служебной учётной записи на временный каталог.