Печать этикеток на DYMO LabelManager 280 через DYMO Connect Web Service

29.08.23

Интеграция - Периферийные устройства

На сайте производителя принтера DYMO LabelManager 280 вместе с драйвером поставляется пакет DYMO Connect, который предлагает функционал вёрстки этикеток в фирменном формате и отправки их напрямую на принтер. Так же в этом пакете есть веб-сервис для взаимодействия с принтером через HTTP-запросы, о котором и пойдет речь в этой статье.

Предисловие

Вообще у DYMO LabelManager 280 есть режим работы в качестве обычного принтера без какого-либо софта. Но в таком режиме есть проблемы, связанные с ограничениями драйвера, из-за чего не все напечатанные этикетки получаются такими, какими хотелось бы. Более предсказуемо принтер печатает этикетки, если создавать их при помощи софта от производителя и через него же отправлять на печать. К счастью, у этого софта имеется api в виде веб-сервиса Dymo Connect Web Service, вот только документации на него нет нигде. Производитель предлагает взаимодействовать с ним через библиотеку DYMO Connect Framework на базе JavaScript и в качестве примеров приводит несколько частично рабочих веб-страниц. Пришлось потратить немало времени в отладчике браузера, чтобы понять, как общаться с веб-сервисом напрямую посредством отправки HTTP-запросов и, прорываясь через бесконечные бэд реквесты, в итоге получить заветный код 200 и вылезшую из принтера безупречную этикетку. На данный момент эта статья является единственным мануалом по взаимодействию с Dymo Connect Web Service через http-запросы, который можно найти в свободном доступе. В конце статьи будут перечислены все необходимые ссылки, а так же приведен пример печати этикетки через веб-сервис прямо из 1С.
 

Как установить драйвер и ПО от производителя

Скачиваем с сайта производителя пакет DYMO Connect для Windows, на момент написания статьи актуальная версия 1.4.3.131. 
Сам процесс установки ничем не примечателен, в компонентах для установки нужно не забыть выбрать Dymo Connect Web Service. После установки в меню Пуск появятся ярлыки для запуска Dymo Connect и Dymo Connect Web Service.
 

Как сделать этикетку

Интерфейс программы Dymo Connect русифицирован и интуитивно понятен - запутаться в нём сложно. Так что просто запускаем, верстаем и сохраняем. В результате получится файл с расширением dymo, внутренняя структура которого представляет собой обычный XML, благодаря чему можно использовать готовую этикетку как шаблон, программно подставляя параметры в соответствующие места перед отправкой на печать. В этой же программе в нижней части отображается статус и заряд АКБ подключенного принтера. 


 
 Пример содержимого файла этикетки в формате dymo

 <?xml version="1.0" encoding="utf-8"?>
<DesktopLabel Version="1">
  <DYMOLabel Version="3">
    <Description>DYMO Label</Description>
    <Orientation>Landscape</Orientation>
    <LabelName>12MMX7M BLK/WHI BL1</LabelName>
    <InitialLength>1</InitialLength>
    <BorderStyle>SolidLine</BorderStyle>
    <DYMORect>
      <DYMOPoint>
        <X>0.4166667</X>
        <Y>0.07777777</Y>
      </DYMOPoint>
      <Size>
        <Width>2.979245</Width>
        <Height>0.3222222</Height>
      </Size>
    </DYMORect>
    <BorderColor>
      <SolidColorBrush>
        <Color A="1" R="0.1372549" G="0.1215686" B="0.1254902"></Color>
      </SolidColorBrush>
    </BorderColor>
    <BorderThickness>1</BorderThickness>
    <Show_Border>False</Show_Border>
    <GrowingDynamicLayoutManager>
      <RotationBehavior>ClearObjects</RotationBehavior>
      <LabelObjects>
        <BarcodeObject>
          <Name>IBarcodeObject0</Name>
          <Brushes>
            <BackgroundBrush>
              <SolidColorBrush>
                <Color A="1" R="1" G="1" B="1"></Color>
              </SolidColorBrush>
            </BackgroundBrush>
            <BorderBrush>
              <SolidColorBrush>
                <Color A="1" R="0.1372549" G="0.1215686" B="0.1254902"></Color>
              </SolidColorBrush>
            </BorderBrush>
            <StrokeBrush>
              <SolidColorBrush>
                <Color A="1" R="0.1372549" G="0.1215686" B="0.1254902"></Color>
              </SolidColorBrush>
            </StrokeBrush>
            <FillBrush>
              <SolidColorBrush>
                <Color A="1" R="0.1372549" G="0.1215686" B="0.1254902"></Color>
              </SolidColorBrush>
            </FillBrush>
          </Brushes>
          <Rotation>Rotation0</Rotation>
          <OutlineThickness>1</OutlineThickness>
          <IsOutlined>False</IsOutlined>
          <BorderStyle>SolidLine</BorderStyle>
          <Margin>
            <DYMOThickness Left="0" Top="0" Right="0" Bottom="0" />
          </Margin>
          <BarcodeFormat>Code128Auto</BarcodeFormat>
          <Data>
            <MultiDataString>
              <DataString>00000130928</DataString>
            </MultiDataString>
          </Data>
          <HorizontalAlignment>Left</HorizontalAlignment>
          <VerticalAlignment>Middle</VerticalAlignment>
          <Size>SmallMedium</Size>
          <TextPosition>Bottom</TextPosition>
          <FontInfo>
            <FontName>Arial</FontName>
            <FontSize>10</FontSize>
            <IsBold>False</IsBold>
            <IsItalic>False</IsItalic>
            <IsUnderline>False</IsUnderline>
            <FontBrush>
              <SolidColorBrush>
                <Color A="1" R="0.1372549" G="0.1215686" B="0.1254902"></Color>
              </SolidColorBrush>
            </FontBrush>
          </FontInfo>
          <ObjectLayout>
            <DYMOPoint>
              <X>0.4166662</X>
              <Y>0.08531889</Y>
            </DYMOPoint>
            <Size>
              <Width>2.979246</Width>
              <Height>0.2911678</Height>
            </Size>
          </ObjectLayout>
        </BarcodeObject>
      </LabelObjects>
    </GrowingDynamicLayoutManager>
  </DYMOLabel>
  <LabelApplication>Blank</LabelApplication>
  <DataTable>
    <Columns></Columns>
    <Rows></Rows>
  </DataTable>
</DesktopLabel>


Как запустить веб-сервис

Запуск происходит через ярлык Dymo Connect Web Service, после чего сразу же поднимается веб-сервис по адресу https://127.0.0.1:41951/DYMO/DLS/Printing/. Запускать и останавливать его можно через соответствующий значок в трее. Список возможных настроек ограничивается лишь выбором порта из диапазона 41951-41960 и языка. Каких либо конфигурационных файлов или записей в реестре я не нашел, что создаёт определенные проблемы, но об этом позже.
 

Как пользоваться веб-сервисом

Отправляем на сервис HTTP-запрос, в ответ получаем результат. Из всего списка доступных методов интерес представляют вот эти:

StatusConnected (GET)
 - Получить состояние работы веб-сервиса. Вернулся ответ True - сервис работает. Параметров нет.

GetPrinters (GET)
 - Получить список имен доступных принтеров в виде XML. Этот запрос обязательно должен быть выполнен перед первым использованием метода PrintLabel. Опытным путем выяснено, что без этого не происходит инициализация принтера на веб-сервисе. Параметров нет.

RenderLabel (POST)
 - Скомпилировать изображение этикетки по её XML представлению. Может потребоваться для предпросмотра того, что будет напечатано, когда этикетка формируется по шаблону с программно заполняемыми параметрами. При успехе возвращается картинка в виде строки Base64. В теле запроса должен присутствовать обязательный параметр

    LabelXml - XML представление этикетки

PrintLabel (POST)
 - Отправить этикетку на печать. Вернулся ответ True - этикетка отправлена на печать. В теле запроса должны присутствовать два обязательных параметра:

    PrinterName - имя принтера

    LabelXml - XML представление этикетки

Вот пример выполнения метода PrintLabel через Postman, в результате выполнения которого принтер напечатает отправленную на него в параметре labelXml этикетку:
 


 

Почему при обращении с другого компьютера веб-сервис не доступен

Если с запущенным веб-сервисом посмотреть открытые порты через netstat, то можно увидеть, что Dymo Connect Web Service слушает запросы только от localhost:

TCP    127.0.0.1:41951        ComputerName:0            LISTENING

Повторюсь, что каких либо конфигурационных файлов веб-сервиса ни в папке с программой, ни в реестре нет, так что проблему придется решать при помощи стороннего софта. Например, можно организовать проксирование через веб-сервер nginx. В результате получится открытый для внешних соединений порт, запросы с которого будут локально перенаправляться на localhost:41951.
 

Как установить и запустить nginx

Установка nginx не требуется, запуск происходит путем открытия nginx.exe через cmd или powershell. Перед запуском потребуется сгенерировать SSL-сертификат, поскольку служба Dyno Connect Web Service работает по протоколу https, а так же сконфигурировать nginx.conf.
 

Как сгенерировать сертификат для https через OpenSSL

Для генерации сертификата потребуется OpenSSL. Скачать его с официального репозитория можно только в виде исходников для последующей компиляции. Тем не менее, на официальной wiki-странице проекта есть ссылки, откуда рекомендуется брать собранные для windows бинарники. Генерация сертификата происходит при помощи команды

openssl.exe req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out nginx-certificate.pem -keyout nginx.key

Полученные файлы nginx-certificate.pem и nginx.key помещаем в папку \nginx\conf\ рядом с файлом nginx.conf
 

Как настроить проксирование в nginx

Открываем файл nginx.conf и добавляем в секцию HTTP вот это:

server {
        listen       55555 ssl;
 
        ssl_certificate      nginx-certificate.pem;
        ssl_certificate_key  nginx.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
           proxy_pass https://127.0.0.1:41951/;
        }
    }

После перезапуска nginx подхватит измененный конфигурационный файл и Dymo Connect Web Service станет доступен извне через порт 55555.
 

Как напечатать этикетку из 1С через веб-сервис

&НаСервере
Процедура ОтправитьНаПринтерЧерезВебСервисНаСервере()
	
	//1. Инициализация принтера
	Соединение = Новый HTTPСоединение("192.168.1.105:55555/DYMO/DLS/Printing/GetPrinters",,,,,,
        Новый ЗащищенноеСоединениеOpenSSL());
		
	Запрос = Новый HTTPЗапрос();
	Результат = Соединение.Получить(Запрос);	
	
	//2. Печать
	Соединение = Новый HTTPСоединение("192.168.1.105:55555/DYMO/DLS/Printing/PrintLabel",,,,,,
        Новый ЗащищенноеСоединениеOpenSSL());    
			
	Заголовки = Новый Соответствие;    
	Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded;"); 	
		
	Запрос = Новый HTTPЗапрос("/", Заголовки);   
	
	ЗначениеШтрихкода = "0123456789";

	ТелоЗапроса = ПолучитьТелоЗапроса(ЗначениеШтрихкода); 
	
	Запрос.УстановитьТелоИзСтроки(ТелоЗапроса);
    	 	
	Результат = Соединение.ОтправитьДляОбработки(Запрос);
	
КонецПроцедуры

&НаСервере
Функция ПолучитьТелоЗапроса(ЗначениеШтрихкода)
	
	ИмяПринтера = "DYMO LabelManager 280";

	//XML шаблон этикетки помещен в общий макет с типом текстовый документ	
	//Для параметризации шаблона содержимое тега DataString в макете предварительно 
	//заменено на "[ЗначениеШтрихкода]"
	
	МакетЭтикеткиXML = ПолучитьОбщийМакет("ШаблонЭтикеткиDYMO");
	
	ЭтикеткаXML = МакетЭтикеткиXML.ПолучитьТекст();	
	
	ЭтикеткаXML = СтрЗаменить(ЭтикеткаXML, "[ЗначениеШтрихкода]", ЗначениеШтрихкода); 
	
	ТелоЗапроса = "printerName=" + ИмяПринтера + "&labelXml=" + ЭтикеткаXML + "&labelSetXml" + "&printParamsXml"; 
		
	Возврат ТелоЗапроса;
	
КонецФункции


Полезные ссылки

Официальный сайт Dymo с драйверами и ПО: https://www.dymo.com/support?cfid=user-guide

Репозиторий c Dymo Connect Framework для любителей JS: https://github.com/dymosoftware/dymo-connect-framework

Пример использования фреймворка: https://s3.amazonaws.com/download.dymo.com/dymo/Software/JavaScript/PreviewAndPrintLabel/PreviewAndPrintLabel.html

Официальный сайт nginx: https://nginx.org/ru/download.html

Официальная wiki OpenSSL с источниками загрузки бинарников под windows: https://wiki.openssl.org/index.php/Binaries

Принтер этикеток Dymo LabelManager 280 HTTP-Запросы Nginx OpenSSL

См. также

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    17965    18    22    

17

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

7200 руб.

04.05.2021    20098    13    19    

17

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    14536    42    8    

18

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    1665    1    0    

3
Оставьте свое сообщение