Печать MS Word документа из командной строки

Обычно для пользователя при формировании различного рода документов в формате MS Word формировались файлы и просто открывались.

Для этого вызывалась процедура host и передавалась строчка запуска.

Например, фрагмент кода

cmd  := 'cmd /c start winword.exe "'||pi_fname||'"';
host(cmd);

Однако возникла задачка массовой печати. Т.е. есть подготовленные файлы, и их надо, например, при нажатии на кнопку распечатать на принтере. Естественно, пользователь не должен открывать, печатать, закрывать каждый документ.

В итоге вызов видоизменился до следующего


cmd  := 'cmd /c start /wait winword.exe "'||pi_fname||'" /q /n /mFilePrintDefault /mFileSave /mFileExit';
host(cmd);

Что добавилось

  • start /wait – дает нам возможность запустить приложение и ждать его завершения. В нашем случае мы должны в определенном порядке получать на принтере документы, т.е. они должны и попадать в очередь последовательно, а без ожидания маленькие документы могут встать в очередь быстрее
  • далее пойдут параметры уже непосредственно для MS Word
  • /q – не показывать окно заставки (splash screen)
  • /n – не создавать новый документ (new default document)
  • /m – выполнение макроса (runs a macro [/mmacroname])
  • /mFilePrintDefault – печать на принтере по умолчанию
  • /mFileSave – сохранение документа
  • /mFileExit – закрытие документа

Сначала все работало без параметра сохранения документа, но почему-то некоторые документы при открытии получали статус измененных и, соответственно, при закрытии выводился запрос на сохранение. Его нам не надо получать, т.к. процесс печати приостанавливается; соответственно, добавляем сохранение.

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

Если же использовать такой вызов не в рамках данный задачи, а например, просто использовать его для печати документов из командной строки, то, лучше выкинуть параметр /mFileSave из строки вызова.

 

Leave a Reply

Your email address will not be published. Required fields are marked *