|
печать pdf пакетная | ☑ | ||
---|---|---|---|---|
0
domanoff2666
14.01.19
✎
16:33
|
есть прикрепленые к докам пдф файлы, надо списком печатать, учитывая последние возможности платформы какие наиболее простые способы решения?
|
|||
1
d4rkmesa
14.01.19
✎
16:46
|
(0) Через ПолеHTMLДокумента, но достаточно геморойно. Где-то будет работать, где-то нет. "Последние возможности платформы" в этом плане подходящие будут аж в 8.3.14. Через Акробат с отлавливанием и принудительным закрытием просмотрщика тоже не очень красиво будет.
|
|||
2
d4rkmesa
14.01.19
✎
16:49
|
Вариант через Акробат, работает на клиенте, ограничение - не должно быть неработающих сетевых принтеров с постоянно заполненной очередью печати. Код можно переписать поприличнее, но лень:
// Процедура выполняет попытку напечатать pdf-файлы из списка в фоновом режиме без участия пользователя // Параметры: // МассивФайлов - массив элементов типа "Файл", либо массив структур с ключами "ПолноеИмя" и "Имя" // ИмяПринтера - имя принтера, на который необходимо отправить задание // Процедура ФоноваяПечатьPDFФайлов(МассивФайлов, ИмяПринтера = "") Экспорт WshShell = Новый COMОбъект("WScript.Shell"); ПутьAdobeReader = WshShell.RegRead("HKCR\Software\Adobe\Acrobat\Exe\"); Если Не ЗначениеЗаполнено(Путь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); ЗаданиеДобавлено = Ложь; ТекущееВремя = ТекущаяДата(); Пока Не ЗаданиеДобавлено И ТекущаяДата() < ТекущееВремя + 15 Цикл // 15 секунд на добавление задания ОбработкаПрерыванияПользователя(); Для каждого ЗаданиеПечати Из oService.InstancesOf("Win32_PrintJob") Цикл ОбработкаПрерыванияПользователя(); ЗаданиеДобавлено = ЗаданиеПечати.Document = Файл.Имя; КонецЦикла; КонецЦикла; Если Не ЗаданиеДобавлено Тогда Сообщить("Не удалось отправить на печать файл '" + Файл.Имя + "'.", СтатусСообщения.Важное); КонецЕсли; КонецЦикла; // Ожидаем завершения печати ТекущееВремя = ТекущаяДата(); Пока (oService.InstancesOf("Win32_PrintJob").Count > 0)И(ТекущаяДата() < ТекущееВремя + 15) Цикл КонецЦикла; // Получаем имя процесса НомерСимвола = Найти(ПутьAdobeReader, "\"); Пока НомерСимвола > 0 Цикл ПутьAdobeReader = Сред(ПутьAdobeReader, НомерСимвола + 1); НомерСимвола = Найти(ПутьAdobeReader, "\"); КонецЦикла; // Убиваем процесс WshShell.Run("taskkill /f /im " + ПутьAdobeReader, 0); КонецПроцедуры //ФоноваяПечатьPDFФайлов(МассивФайлов, ИмяПринтера = "") Экспорт |
|||
3
spiller26
14.01.19
✎
16:53
|
(2) Пакетная печать pdf-файлов в фоне Adobe Reader
Процедура ПечатьAdobePDF() Принтер = "HP LaserJet M1530 MFP Series PCL 6"; //Принтер = "Adobe PDF"; Попытка апп = Новый COMОбъект("AcroExch.App"); док = Новый COMОбъект("AcroExch.PDDoc"); Исключение Сообщить("ошибка"); Возврат; КонецПопытки; апп.Hide(); //скрыть приложение док.Open("d:\2.pdf"); дс = док.GetJSOBject(); пп = дс.GetPrintParams(); //параметры печати пп.interactive = пп.constants.interactionLevel.silent; //печать без прогрессора пп.printerName = Принтер; пп.pageHandling = пп.constants.handling.shrink; //по ширине страницы //пп.pageHandling = пп.constants.handling.fit; пп.numCopies = 3; //количество копий //пп.firstPage = 0; //пп.lastPage = дс.numPages-1; //пп.tileScale = 1; дс.print(пп); //сама печать док.Close(); док = Неопределено; апп.Exit(); апп = Неопределено; КонецПроцедуры |
|||
4
domanoff2666
15.01.19
✎
10:28
|
(2) а на свободный принтер нет кода чтоб отправлялось?
|
|||
5
d4rkmesa
15.01.19
✎
10:57
|
(4) Нет. Там проблема сопоставить имя принтера с данными Win32_PrintJob, если только по DriverName. Да и вообще эти костыли не для высокоинтенсивной печати.
|
|||
6
domanoff2666
16.01.19
✎
10:34
|
(5) через abobe acrobat pro не работает не та команда чтоль?
|
|||
7
d4rkmesa
16.01.19
✎
10:37
|
(6) Если есть Pro, то делать надо как в (3). Хотя, может обычный просмотрщик тоже будет работать.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |