Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 20:48

Количество копий pdf

Автор Gae4ka, 17 авг 2016, 10:13

0 Пользователей и 1 гость просматривают эту тему.

Gae4ka

Добрый день! Подскажите, можно ли как-нибудь передать количество копий для печати pdf файла
Печатаю так
    ИмяФайла = КаталогФайлов+ВыборкаФайл.Файл.ИмяФайлаНаДиске;
    ЗапуститьПриложение("C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32 /p "+ИмяФайла);
Открывается документ и диалоговое окно печати, можно ли как-нибудь автоматически в это окно передать количество копий документа?


LexaK

да можно.
после команды
ЗапуститьПриложение("C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32 /p "+ИмяФайла);
1.выполняете паузу несколько секунд, подбираете замером
2.с помощью функции Ws.SendKeys отправляете несколько Табов (кнопка табуляция) смотрите по своему диалоговому окну печати, когда попадаете в поле с количеством
3 .с помощью функции Ws.SendKeys отправляете нужную цифру количества копий.
4. (!!!) с помощью этой же функции и саму кнопку Печать в вашем диалоге можно нажать
5. (+++) и в довершение вообще закрыть после печати ваш AcroRd32
ну вообще полная автоматика получается :zebzdr:
если помогло нажмите: Спасибо!

Gae4ka

ОГО, спасибо :zebzdr:
А по Alt+F4 у меня закрывается файл, а как закрыть саму программу?

LexaK

когда Помогло надо еще и кнопку: Спасибо под аватаркой нажать!

4.Отпаравка на печать: Ws.SendKeys("{Enter}");
5.Закрытие Ридера: Ctrl + Q, команда: Ws.SendKeys("^{q}");
не забывайте по паузы, иногда это очень важно


вот вообще кусок кода, который:
открывает редер с файлом,
открывает диалог печати,
устанавливает нужное количество копий
печатает
закрывает Редер

протестирована все работает на ура!
(примечание: Реадер открывайте без ключа /Р )


//запускаем Reader с нужным файлом
ИмяФайла = "D:\!1C\Temp\Список.pdf";
ЗапуститьПриложение("C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32 "+ИмяФайла);

Ws = Новый COMОбъект("WScript.Shell");
прСекунды = 3;
СтрокаЗапроса = "ping -n 1 -w "+Формат(прСекунды * 1000, "ЧГ=0") +" 1.1.1.1";

//пауза 3 сек.
Ws.Run(СтрокаЗапроса, 0, -1);

//открываем диалог Печати
Ws.SendKeys("^{p}");

//перемещаемся в поле с количестом копий
Ws.SendKeys("{Tab}");

//устанавливаем количество копий = 2
Ws.SendKeys("{2}");

//жмем кнопку Печать
Ws.SendKeys("{Enter}");

//ждем пока отправиться на печать и закроется окно диалога печати
Ws.Run(СтрокаЗапроса, 0, -1); //пауза 3

//закрываем сам Реадер
Ws.SendKeys("^{q}");

если помогло нажмите: Спасибо!

Gae4ka

Поставила :)
Просто как часто бывает на уточняющие вопросы после спасибо, мало кто отвечает))))
СУПЕР!! про Ctrl+Q я и не знала

Gae4ka

Паузу заменила циклом
прСекунды = 5; //пауза на 5 сек
TекДата = ТекущаяДата()+прСекунды;
Пока ТекущаяДата()<ТекДата Цикл
RонецЦикла;

LexaK

Это плохая пауза, она съедает ресурсы процессора! можете посмотреть в диспетчере задач загрузку процессора.
для Виндов и Линукса нашел пару коменд, для мягкой паузы. В вашем примере мягкая пауза для Виндов.

просто интересно, почему вы заменили мою паузу?
она у вас не сработала?
или вы не поняли что это за код, и тупо решили заменить на что-то понятное (но тормознутое)?
если помогло нажмите: Спасибо!

Gae4ka

Я программист и системщик, я не тупо заменила Вашу паузу, а бездумная посылка пакетов - это плохая вещь для сети, а т.к. у меня этих пауз будет много, и часто, сисадмины попросили заменить эту паузу
Она ничуть не тормознутая, на работу системы 1С это не повлияло настолько, чтобы пользователь это заметил

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск