2016-09-15 2 views
0

У меня есть внутреннее приложение PHP/IIS. У меня есть необходимость в выполнении бэкэнд-процесса (powershell), который генерирует PDF из Crystal Reports и затем отправляет его на принтер. Я не хочу вызывать powershell прямо из моей PHP-программы, потому что он зависает на экране браузера во время работы задней части, и редко он фактически завершает процесс.Trigger back end printing from PHP

Я бегу PHP на IIS/Server2008R2 с MSSQL2008R2 как моя платформа базы данных.

Я отправляю этот вопрос, и сам собираюсь ответить на него, поскольку я понял, как это сделать после многих часов исследований и испытаний.

ответ

0

После многих часов исследований и разочарования, я придумал следующее решение, которое работает:

  1. У меня есть Powershell скрипт, который я построил, что делает звонки в библиотеку Кристал время выполнения для создания файла PDF и сохраните его в папке.
  2. Я использую foxit reader freader.exe /t filename PRINTERNAME, чтобы отправить его на принтер.
  3. Я устанавливаю cmd для вызова сценария powershell и для очистки. "C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe" -file c:\pdf.ps\ProcessQueue.ps1
  4. Я настраиваю запись планировщика задач, вызванную идентификатором события 17061, источником MSSQLSERVER, который вызывает мой командный файл.
  5. Из моего PHP переднего конца, я отправить SQL-запрос: xp_logevent 55555,'Print Job Requested',Informational

SQL Server повышает запись EVENTLOG, которая вызывает запланированное задание, которое работает мой сценарий на заднем конце. Скрипт проверяет таблицу printQueue в базе данных, создает PDF-файл и печатает его.

Из-за проблем с разрешениями вы не можете заставить PHP напрямую регистрироваться в EventLOG.

Благодаря многим другим на этом сайте для получения полной информации. Надеюсь, это поможет кому-то другому, кто борется с этой проблемой.