Конвертируем из HTML в JPEG, PNG или SVG, без виртуальных принтеров

30.10.24

Разработка - Универсальные функции

Я перекопал море страниц интернета, прежде чем понял, что можно использовать консольный софт для решения своей задачи. Ниже расскажу, что за задача и как я её решил.

Итак, задача:

Необходимо создать макет печатной формы, на котором будет штамп "Коммерческая тайна".

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

P.S. макет в формате ТабДок, по причине необходимости менять данные в зависимости от содержания БД, смена организации, изменение реквизитов организации.

Путь поиска решения:

Тут будет очень кратко. Я рылся на Инфостарте, рылся на иных схожих по темам порталах в поиске решений, предлагалось поставить на сервер виртуальный принтер и с его помощью формировать картинку и использовать для решения поставленной задачи. НО, устанавливать сторонний софт - НЕЛЬЗЯ...

Непосредственно решение:

1. Я нашел софтину: "wkhtmltopdf", она консольная и работает как утилита без установки.

2. Закинул утилиту в общий макет в двоичные данные.

Далее наконец-то я добрался до написания кода.

Для собственного удобства я создал новый ОбщийМодуль, тут вы вольны решать, как вам удобно.

 
 Функция формирования изображения

Что тут происходит?

Подготавливаем каталог, в котором сохраняем утилиту из двоичных данных.(в этот же каталог будем сохранять временные файлы HTML и Изображения).

Далее формируем печатную форму, сохраняем её в формате html.

Формируем команду для запуска утилиты:
   

    КомандаЗапуска = Новый Массив();
    КомандаЗапуска.Добавить(Приложение); // путь до утилиты
    КомандаЗапуска.Добавить("--transparent"); // делаем фон получаемого изображения прозрачным
    КомандаЗапуска.Добавить("--crop-w"); //обрезка изображения по ширине
    КомандаЗапуска.Добавить("390"); //ширина изображения на выходе в px
    КомандаЗапуска.Добавить("--format"); //команда для задания формата
    КомандаЗапуска.Добавить("png"); //непосредственно формат изображения (jpeg,png,svg)
    КомандаЗапуска.Добавить(ПолноеИмяHTMLФайла); //путь до html файла макета печатной формы
    КомандаЗапуска.Добавить(ПолноеИмяКартинки); //путь до получаемой картинки

Далее вызываем функцию запуска утилиты, а на выходе получаем изображение. В каталоге.

Помещаем его во временное хранилище, и удаляем все фалы которые наплодили.

Далее все вспомогательные функции и процедуры будут без пояснения.

 
 Подготовка данных обработки
 
Проверка на существование файла
 
 Формирование Печатной формы
 
 Запуск утилиты


На этом все, можете брать и пользоваться.

P.S. на прикрепленном скриншоте перечислены команды с инструкции официального сайта разработчика утилиты. Чтобы получить утилиту, нужно скачать установочник с портала: "https://wkhtmltopdf.org/downloads.html", после установки в каталоге появится папка с набором файлов, но нужный вам лежит в папке "bin", там будет файл "wkhtmltoimage", его и закидывайте в макет.

Вступайте в нашу телеграмм-группу Инфостарт

конвертация html svg jpg png изображение программная конвертация

См. также

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    5399    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    46289    dimanich70    83    

164

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    6837    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    57341    atdonya    31    

68

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    8603    ke.92@mail.ru    17    

68

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    22757    YA_418728146    8    

174
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. BackinSoda 30.10.24 10:56 Сейчас в теме
Как же выглядит сам html ?
2. M_A_D 193 30.10.24 11:18 Сейчас в теме
(1) вы при желании можете воспользоваться простейшим примером:
1. Формируете ТабДок
2. Записываете его в формате HTML
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.HTML);

3. открываете полученный файлик и смотрите
Это все делается средствами 1С.
3. BackinSoda 30.10.24 17:16 Сейчас в теме
(2) Как записать в html понятно, а как при этом в html редактируется картинка, если туда надо передать как-то параметры (название организации и прочее) - вот эта часть не понятна.
В изначальном табдоке область с параметрами, а поверх неё прозрачная картинка ? Или картинки и вовсе нет ?
Если её нет и там просто область с условно "синим шрифтом" и место под параметры, почему её тогда потом не вставлять как область, а конвертировать в png ?
4. M_A_D 193 30.10.24 17:19 Сейчас в теме
(3)
1. Формируем табдок, как обычно. Макет, в нем параметры, в параметры как в обычной печатной форме заполняем данными: Организация, инн, адрес, и т.д.
2. Заполненный макет сохраняем в html
3. Передаем утилите, она делает PNG с прозрачным фоном.
4. Вставляем поверх табличного документа с абсолютным позиционированием, без привязки к области.
5. artbear 1583 31.10.24 12:55 Сейчас в теме
интересное решение задачи.

но вижу противоречие
- "НО, устанавливать сторонний софт - НЕЛЬЗЯ..."
- используем стороннюю утилиту

фактически вы обошли запрет безопасников. вряд ли они будут рады такому способу решения!

тем более, что в политиках безопасности может быть заблокирован запуск любых приложений, в т.ч. и консольных, кроме явно разрешенных
6. M_A_D 193 31.10.24 20:32 Сейчас в теме
(5) Нет, утилиты разрешены (это я уточнил заранее).
А вот установка виртуальных принтеров, например - нет....
Думаю это обусловлено не политиками, а тем, что Админам лень заниматься установкой =D
7. efin 04.11.24 03:56 Сейчас в теме
угу, я вот 12 лет так делаю, утилиты типа pdftk (как раз штампы на pdf наносит и прочие штуки делает), jpg2pdf, imagemagic, winscp, консольные утилиты из пакета КриптоПРО CSP для создания присоединенных подписей и снятия таких подписей, и многие другие.

А потом - бах! - импортозамещение, linux...

(0) Делайте по-нормальному, в платформе можно табдок сохранить как pdf, на pdf средствами платформы свежих версий можно нанести штамп...
8. M_A_D 193 05.11.24 14:22 Сейчас в теме
(7) Я сделал нормально в рамках возможностей, ИМХО.
Поясню:
1. Компания международная, работаем на лицензионных МАЙКАХ))))
2. Я вставляю не в PDF, а Word.
3. Как вставить изображение в PDF знаем, плавали(скриншот).

Решение может быть полезно и имеет право на жизнь. Оно даже нормально, если реалии компании позволяют использовать, опять же ИМХО
Прикрепленные файлы:
Для отправки сообщения требуется регистрация/авторизация