Печать на стороне сервера при помощи Ghostscript
Рассмотрим вариант печати табличного документа на сервере при помощи Ghostscript.
Запрос клиента: ПО для ТСД, которое получало бы данные из Комплексной автоматизации (далее КА), обрабатывало их и передавало обратно в КА.
Результат: написано мобильное приложение для ТСД, которое обменивается данными с КА через web-сервис. Приход, расход и перемещение товара на складе реализовано через мобильное приложение.
Далее стало необходимо печать этикеток с ТСД реализовать через шаблон этикеток в КА, так чтобы они выводились на принтер этикеток. Необходимо было передавать данные из ТСД в КА через web-сервис, обрабатывать их и выводить на печать. Данные обрабатывались на сервере, поэтому возникла необходимость печати табличного документа именно на сервере. Нельзя выполнить печать на стороне сервера 1С при помощи штатных методов, поэтому решили данную задачу при помощи библиотеки Ghostscript. Данный способ позволяет выполнять печать документов в регламентных заданиях. Предварительно необходимо установить его на сервер 1С.
Номенклатура = RS_ОбщегоНазначения.СсылкаСправочника(ИдНоменклатуры, "Номенклатура");
КоличествоШтрихкодов = Число(Количество);
ПараметрКоманды = Новый Массив;
ПараметрКоманды.Добавить(ПредопределенноеЗначение("Справочник.Номенклатура.ПустаяСсылка"));
ИменаМакетов = "ЭтикеткаТовары";
ИмяПринтера = RS_ОбщегоНазначения.ПолучитьПринтерДляПечатиШтрихкодов();
пПутьКГХостСкрипт = "C:\Program Files\gs\gs10.01.1\bin\gswin64.exe";
пПринтер = ИмяПринтера;
пПутьКГХостСкрипт = """" + пПутьКГХостСкрипт + """";
пПринтер = """%printer%" + пПринтер + """";
ИмяМенеджераПечати = "Обработка.ПечатьЭтикетокИЦенников2_5";
МассивОбъектов = ПараметрКоманды;
ПараметрыПечати = RS_ОбщегоНазначения.ПолучитьПараметрыПечатиШтрихкодов(Номенклатура, Штрихкод, КоличествоШтрихкодов);
#Если ТолстыйКлиентОбычноеПриложение Тогда
ПечатныеФормы = УправлениеПечатьюВызовСервера.СформироватьПечатныеФормыДляБыстройПечатиОбычноеПриложение(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати);
Если НЕ ПечатныеФормы.Отказ Тогда
ОбъектыПечати = Новый СписокЗначений;
Для Каждого ОбъектПечати Из ПечатныеФормы.ОбъектыПечати Цикл
ОбъектыПечати.Добавить(ОбъектПечати.Значение, ОбъектПечати.Ключ);
КонецЦикла;
ПечатныеФормы.ОбъектыПечати = ОбъектыПечати;
КонецЕсли;
#Иначе
ПечатныеФормы = УправлениеПечатьюВызовСервера.СформироватьПечатныеФормыДляБыстройПечати(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати);
#КонецЕсли
Для Каждого Стр ИЗ ПечатныеФормы.ТабличныеДокументы Цикл
Стр.Значение.ИмяПринтера = ИмяПринтера;
Стр.Значение.ПолеСверху = 1;
Стр.Значение.ПолеСлева = 2;
Стр.Значение.ПолеСнизу = 0;
Стр.Значение.ПолеСправа = 2;
Стр.Значение.АвтоМасштаб = Истина;
Стр.Значение.РазмерКолонтитулаСверху = 10;
Стр.Значение.РазмерКолонтитулаСнизу = 10;
Стр.Значение.ШиринаСтраницы = 43;
Стр.Значение.ВысотаСтраницы = 25;
КонецЦикла;
ммВДюйме = 25.4;
РазмерБумаги = " -dDEVICEWIDTHPOINTS=" + Формат(ПечатныеФормы.ТабличныеДокументы[0].Значение.ШиринаСтраницы/ммВДюйме*72,"ЧДЦ=0; ЧГ=0") + " -dDEVICEHEIGHTPOINTS=" + Формат(ПечатныеФормы.ТабличныеДокументы[0].Значение.ВысотаСтраницы/ммВДюйме*72,"ЧДЦ=0; ЧГ=0");
ФайлДляПечати = ПолучитьИмяВременногоФайла("pdf");
ПечатныеФормы.ТабличныеДокументы[0].Значение.Записать(ФайлДляПечати, ТипФайлаТабличногоДокумента.PDF);
ФайлДляПечати = """" + ФайлДляПечати + """";
КомандаПечати = пПутьКГХостСкрипт + " -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dNumCopies=1 -sDEVICE=mswinpr2 -sOutputFile=" + пПринтер + " -dPDFFitPage " + РазмерБумаги + " "+ ФайлДляПечати;
ЗапуститьПриложение(КомандаПечати,,Ложь,);
- Указываем путь к установленному Ghostscript и имя принтера, на который будем выводить этикетки.
- Стандартными средствами формируем табличный документ, прописываем настройки печати, сохраняем полученный документ в файл PDF.
- Далее прописываем команду, с помощью которой через Ghostscript мы выполняем печать на принтер.
Comments
So empty here ... leave a comment!