Печать этикеток на 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С:ITIL(ИТИЛ), 1С:ITILIUM, Управление IT-отделом 8 через интернет с любого устройства посредством браузера, увеличивая эффективность работы пользователей и снижая нагрузку на сервер. Быстрая инсталляция портала за пару часов, удобный и интуитивно понятный интерфейс и безопасность данных помогут упростить работу с порталом и ускорить выполнение бизнес-процессов компании.

128000 руб.

19.12.2023    2746    3    0    

10

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

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

60000 руб.

07.05.2019    34839    68    45    

27

Оптовая торговля Розничная торговля WEB-интеграция 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

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

57600 руб.

26.11.2024    2521    2    3    

5

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

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

36000 руб.

03.08.2020    19155    23    22    

20

WEB-интеграция Программист Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    18924    54    50    

31

WEB-интеграция Программист Бизнес-аналитик Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

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

14400 руб.

20.12.2024    944    4    2    

6

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

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

24000 руб.

27.09.2024    4251    3    2    

4

Обмен с ГосИС WEB-интеграция Бухгалтер Пользователь Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    93264    193    217    

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