2012-05-03 1 views
4

Я следующий код в пакетный файл, который вызывается с помощью PHP скрипт с использованием shell_exec():Пакетный файл, который открывает читателю самана для печати PDF не заканчивается/закрыть

"C:\Program Files (x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe" 
/t "D:\xampp\htdocs\instrument\app\webroot\Repair Tickets\%1.pdf" 
\\hnurenfp01\Accounts_FS-1128MFP 

Параметр% 1 имя файла который отправляется в качестве аргумента в пакетный файл из скрипта PHP.

Наблюдаемое поведение:

  • PHP страница успешно вызывает пакетный файл с правильным аргументом
  • Два экземпляра AcroRd32.exe молча начать на сервере
  • PDF файлов отпечатанных Сетевой принтер
  • AcroRd32.exe экземпляры не заканчиваются/закрываются
  • Пакетный файл продолжает работать (до тех пор, пока не закончится процесс AcroRd32.exe)
  • PHP скрипт слева выполняется, исключающим клиентскую машину, чтобы сделать что-нибудь еще

Ожидаемое поведение:

  • PHP страница успешно вызывает пакетный файл с правильным аргументом
  • два экземпляра AcroRd32.exe бесшумно запускается на сервере
  • Печать PDF-файла сетевому принтеру
  • AcroRd32.exe экземпляры конца/закрыть
  • Пакетный сценарий завершается (который, в свою очередь, должен освободить PHP скрипт)
  • PHP скрипт продолжает и в конечном итоге заканчивается, чтобы позволить конечным пользователям продолжать свою работу

Неудачные решения:

  • Использование Taskkill в пакетном файле, чтобы завершить процесс AcroRd32.exe после печати, но AcroRd32.exe остается открытым, даже при использовании (сила) флаг/F. Когда я вручную заканчиваю процессы AcroRd32.exe, пакетный файл продолжается, а затем выполняет строку TASKKILL, которая, конечно, возвращает ошибку «процесс не найден», потому что ее больше нет. Таким образом, казалось бы, элемент управления не возвращается обратно в командный файл после печати, он остается с AcroRd32.exe.

Есть ли у кого-нибудь идеи, как я могу закрыть Adobe Reader после печати PDF?

ответ

3

я нашел следующую цитату в http://www.robvanderwoude.com/commandlineswitches.php#Acrobat

Распечатайте PDF файл беззвучно:

AcroRd32.exe /N /T PdfFile PrinterName [ PrinterDriver [ PrinterPort ] ]
Последняя команда откроет новое окно Adobe Reader, напечатать файл PDF, а затем завершите его окно, если это окно не останется единственным оконным окном Adobe Reader: по крайней мере одно окно Adobe Reader останется открытым.

Это последнее предложение - плохая новость.

Вы можете вызвать AcroRD32.exe с параметрами/N и/T с помощью команды START, после чего ваш пакетный файл может продолжить работу сразу же после выполнения задания на печать. Если вы не возражаете, чтобы один экземпляр читателя оставался открытым, вы закончили.

Если вы должны закрыть читателя, то ваша партия должна будет его убить. Но я не знаю, как ваш командный файл может определить, когда закончилось задание на печать. Вы можете ввести произвольную задержку с помощью TIMEOUT, но это звучит рискованно.

Я немного смущен тем, что открываются «два экземпляра AcroRd32.exe». Если это так, как работает программа, то это звучит так, как переключатель/N закрывает 1 из 2 экземпляров. Ваша партия может запустить задание печати через START, задержка на пару секунд, чтобы запустить процесс задания на печать, а затем использовать TASKLIST | FINDSTR для контроля количества процессов AcroRd32.exe в цикле. Когда счетчик идет от 2 до 1, задание на печать должно быть завершено, и вы можете убить оставшийся процесс. В теории все равно :)

Удачи.

+0

Хорошая идея, и она действительно работает. Думал, что это не так, но просто не следует использовать «СТАРТ» как в «shell_exec()», так и в командном файле. Я использовал только в пакетном файле. Благодарю. :) – weedave

+0

Казалось бы, я был немного преждевременным в праздновании ... он по-прежнему блокирует мой PHP-скрипт. Я поиграю с ним и дам вам знать, буду ли я работать. – weedave

+0

Не удалось заставить его работать с помощью Adobe Reader. Пробные команды LPR с сервисом LPD и т. Д. - катастрофические для меня! лол. Закончен с помощью Fox It PDF Reader с аналогичной командой: «START» Печать документа «C: \ Program Files (x86) \ Foxit Software \ Foxit Reader \ Foxit Reader.exe"/t "D: \ xampp \ htdocs \ instrument \ app \ webroot \ Docs \% 1.pdf "" \\ <имя_компьютера> \ <имя_терминала> "' – weedave

Смежные вопросы