Печать на сервере 1с. DLL для 1С, способная печатать картинки и pdf файлы в серверном контексте (например, при работе веб-сервиса)

Программирование - Внешние компоненты

3
Не знаю, пригодится кому или нет, писалось для себя, т.к  возникла необходимость печатать на принтере этикеток sscc напрямую с ТСД  через web - сервис. Как известно, веб сервис в 1С работает только в серверном контексте и, к сожалению, разработчики платформы пока не позаботились о возможности вызывать метод  при таких условиях. 

Вся инструкция по работе в архиве с библиотекой. Ограничение по pdf - 10  страниц за раз.

Параметры:
PaperHight-Высота бумаги ( число )
PaperWight - ширина бумаги (число)
PrinterName - Имя принтера ( строка) 
FileName - Имя файла ( строка) 
Landscape - Ориентация (Альбомная\Книжная,true\False) (булево)
PixelJpgX - Параметр для печати картинок ( координата по x)  задается для опеределения места начала отрисовки картинке на листе бумаги ( число)
PixelJpgY- Параметр для печати картинок ( координата по y)  задается для опеределения места начала отрисовки картинке на листе бумаги ( число)
LeftField- левое поле отступа ( число ); 
RightField- правое поле отступа ( число);
UpField  - верхнее поле отступа ( число);
DownField  - нижнее поле отступа ( число);

Методы:
ReturnSettings() - возвращает значение параметров(строка);
PrintPDF() - печатает PDF файл ( возвращает ответ -"ОК" или описание ошибки (строка));
PrintJPG() - печатает Файл картинки jpg  , может и другие форматы ( возвращает ответ -"ОК" или описание ошибки (строка));

Имя для ком соединения -"Component1c.MyClassComponent";

Гуиды Библиотеки :
6844AACB-9194-46bf-81AF-9DA73EE687DC - интерфейс;
69EE0677-884A-4eeb-A3BD-D407844C0C70 - класс реализиующий функциональность интерфейса;

Регистрация :
вместо regsvr32 ( это для ++ библиотек) - C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe  "Путь к файлу"
пример : C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe "C:\Users\user\Documents\component1c\Component1c.dll" 
пример 2 : C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe "C:\Users\user\Documents\component1c\Component1c.dll" /codebase

дорегистрация для 64 битного сервера :

Работа с реестром----
1. создаем раздел с именем "{69EE0677-884A-4eeb-A3BD-D407844C0C70}" в ветке HKEY_CLASSES_ROOT\wow6432node\appid. Для этого раздела создаем строковое свойство "DllSurrogate" с пустым значением.
2. Находим HKEY_CLASSES_ROOT\wow6432node\CLSID\{69EE0677-884A-4eeb-A3BD-D407844C0C70} и добавляем строковое свойство "AppID" со значением "{69EE0677-884A-4eeb-A3BD-D407844C0C70}".

 где 
{69EE0677-884A-4eeb-A3BD-D407844C0C70} гуид приложения 

 

Пример кода 1С  

 МояОбработка=Новый COMОбъект("Component1c.MyClassComponent");
    МояОбработка.PrinterName="Honeywell PM42 (203 dpi) - DP";
    МояОбработка.FileName= "C:\Users\user\Documents\штрихкод.jpg";
    МояОбработка.PaperHight=197;
    МояОбработка.PaperWight=404;
    МояОбработка.PixelJpgX=50;
    МояОбработка.PixelJpgY=10;

   
    Ответ=МояОбработка.PrintJPG();


Тестирование проводилось на платформе 8.3.9+ , КА 1.1  и 64 битном сервере 1С предприятия.

Печатал на принтер этикеток Honeywell PM42  с Терминала сбора данных "EDA50k "  с  установленным на него самописным  мобильным приложением 1С  посредством web -сервиса.  PDF  файлы печатает нормально, однако по какой-то причине - именно на этот принтер всегда в альбомном варианте, хотя и давалась четкая команда на драйвер, что необходим портрет. На обычных принтерах также не всегда отрабатывает команда о смене ориентации . Эту проблему решил (правда, только для обычного принтера)   сохранением из 1С pdf  файла сразу в нужной мне ориентации.

Но  Honeywell PM42 даже  при сохраненном файле в портретном варианте продолжал печатать как альбомный лист.

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

При отправлении изображения на принтер Honeywell PM42 проблема решилась.

Библиотека для работы с печатью изображений типовая (т.е  от виндовс)  и она может печатать разные форматы изображений, но я тестировал только в jpg.

3

Скачать файлы

Наименование Файл Версия Размер
zip архив с dll и описанием
.zip 5,07Mb
13.03.18
6
.zip 1.0.0.0.0 5,07Mb 6 Скачать

См. также

Комментарии
Сортировка: Древо
1. host_kms 123 06.05.18 14:54 Сейчас в теме
Выдает ошибку, вроде все по инструкции сделал
	
    МояОбработка=Новый COMОбъект("Component1c.MyClassComponent");
    МояОбработка.PrinterName="PP8000";
    МояОбработка.FileName= "D:\file.pdf";
    МояОбработка.PaperHight=100;
    МояОбработка.PaperWight=80;
    Ответ=МояОбработка.PrintPDF();
Прикрепленные файлы:
2. evgeny43 5 07.05.18 09:46 Сейчас в теме
(1) Если все сделано по инструкции, но не работает - то мне известна только 1 причина , из за которой может пойти не так .
в моем случае сервер 1с у меня работает от системной записи , если у вас это не так, то необходимо дать доступ вашей учетной записи виндовс, под которой работает сервер 1с до компоненты. (п.с на некоторых пк адекватно регистрируется компонента без "/codebase", а на некоторых с.. , попробуйте оба варианта).
тут есть 2 варианта :
1) в реестре пробежаться по всем записям сделанным компонентой и вами ( щелкать по ним правой кнопкой мыши , и выбирать меню разрешить доступ и т.д)
2) можно дать учетной записи доступ ко всем компонентам на пк .

в разделе Component Services/Computers на My Computer клик правой кнопкой, Свойства (Properties)
закладка Безопасность COM (COM Security)
в разделе Права доступа (Access Permissions) нажать Изменить настройки по умолчанию... (Edit Default...), в открывшемся окне добавить для пользователя, под которым запускается служба SQL Server, права Локальный доступ (Local Access)
в разделе Разрешения на запуск и активацию (Launch and Activation Permissions) нажать Изменить настройки по умолчанию... (Edit Default...), в открывшемся окне добавить для пользователя, под которым запускается служба SQL Server, права Локальный запуск, Локальная активация (Local Launch, Local Activation)



Component Services--- служба компонент "Панель управления\Все элементы панели управления\Администрирование\Службы компонентов".
И не забудьте дать доступ учетной записи 1с , до физического нахождения ком компоненты ( т.е то место куда вы ее скопировали )


P.S "/codebase"
до перерегистрации компоненты, не забудьте почистить реестр от ее остатков в ручном режиме, в противном случае есть большая вероятность, что перерегистрация не поможет.
Оставьте свое сообщение