Имя: Пароль:
1C
 
Печать PDF файлов на сервере через регламентное задание.
0 Radion
 
29.01.18
07:25
УТ 10.3. платформа 8.3.7.2008. странная ситуация на клиенте печатает наклейку. а если работа в фоновом режиме то нет ((( Т.е. получается задание уходит на печать но куда, не понятно. В инете нашел код:
Процедура ФоноваяПечатьPDFФайлов(МассивФайлов, ИмяПринтера) Экспорт
    WshShell = Новый COMОбъект("WScript.Shell");
    //ПутьAdobeReader = WshShell.RegRead("HKCR\Software\Adobe\Acrobat\Exe\");
    КтоПДФ = WshShell.RegRead("HKCR\.pdf\");
    ЧтоПДФ = WshShell.RegRead("HKCR\"+КтоПДФ+"\Shell\Open\Command\");
    ПутьAdobeReader = Лев(ЧтоПДФ,Найти(ЧтоПДФ,".exe")+4);
    Если Не ЗначениеЗаполнено(ПутьAdobeReader) Тогда
        #Если Клиент Тогда
            Сообщить("Не найдена программа Adobe Reader! Печать pdf-файлов невозможна.", СтатусСообщения.Важное);
        #КонецЕсли
        Возврат;
    КонецЕсли;
    
    oLocator = Новый COMОбъект("WbemScripting.SWbemLocator");
    oService = oLocator.ConnectServer("", "", "", ""); //Задания от всех пользователей
    
    oService.Security_.impersonationlevel = 3; //получаем необходимые права
    oService.Security_.Privileges.AddAsString("SeLoadDriverPrivilege");
        
    Для каждого Файл Из МассивФайлов Цикл
        //WshShell.Run(ПутьAdobeReader + " /N /T " + Файл.ПолноеИмя + ?(ЗначениеЗаполнено(ИмяПринтера), " " + ИмяПринтера, ""), 0);
        WshShell.Run(ПутьAdobeReader + " /N /T """ + Файл.ПолноеИмя + """"+ ?(ЗначениеЗаполнено(ИмяПринтера), " " + ИмяПринтера, ""), 0);
        
        ЗаданиеДобавлено = Ложь;
        ТекущееВремя = ТекущаяДата();
        Пока Не ЗаданиеДобавлено И ТекущаяДата() < ТекущееВремя + 15 Цикл // 30 секунд на добавление задания
            #Если Клиент Тогда
                ОбработкаПрерыванияПользователя();
            #КонецЕсли
            Для каждого ЗаданиеПечати Из oService.InstancesOf("Win32_PrintJob") Цикл
                #Если Клиент Тогда
                    ОбработкаПрерыванияПользователя();
                #КонецЕсли
                ЗаданиеДобавлено = ЗаданиеПечати.Document = Файл.Имя;
            КонецЦикла;    
        КонецЦикла;
        
        Если Не ЗаданиеДобавлено Тогда
            #Если Клиент Тогда
                Сообщить("Не удалось отправить на печать файл '" + Файл.Имя + "'.", СтатусСообщения.Важное);
            #КонецЕсли
        КонецЕсли;
        
    КонецЦикла;
    
    // Ожидаем завершения печати
    //Пока oService.InstancesOf("Win32_PrintJob").Count > 0 Цикл КонецЦикла; //ПОКА ЗАРЕМАРИЛ
    // Получаем имя процесса
    НомерСимвола = Найти(ПутьAdobeReader, "\");
    Пока НомерСимвола > 0 Цикл
        ПутьAdobeReader = Сред(ПутьAdobeReader, НомерСимвола + 1);
        НомерСимвола = Найти(ПутьAdobeReader, "\");
    КонецЦикла;
    // Убиваем процесс
    WshShell.Run("taskkill /f /im " + ПутьAdobeReader, 0);
КонецПроцедуры
Может кто встречался с проблемой и подскажет ?
Спасибо.
1 Lama12
 
29.01.18
07:29
(0) Хм... А просто сохранение в pdf неправильно сохраняет?
2 Radion
 
29.01.18
10:26
(1) нормально сохраняет.
3 Radion
 
29.01.18
12:30
Т.к. АдобеРидер не работает в серверном варианте, должен быть запущен клиент, то можно вопрос решить так (через wshshell): КомандаПечати = "Print /d:\\сервер\ИмяПринтера ПутькФайлуПечати";
4 Radion
 
29.01.18
15:18
Проблема получаем файл в формате A6 а принтер печатает только формат A4 ((
5 Radion
 
29.01.18
15:18
Через что можно еще вывести pdf на печать на сервере ?
6 FIXXXL
 
29.01.18
16:43
(5) в 8.3.7 ТабДок.Записать() уже можно напрямую в PDF?
7 FIXXXL
 
29.01.18
16:44
(6) + второй параметр смотри