Печать 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 из строки вызова.

 

Создание документов с помощью шаблонов (.dot) в MS Office 2007 и MS Office 2010

В самых первых проектах формирование MS Word документов было организовано с использованием OLE-технологии (использовался Office XP).

Это удобно: создаем шаблон (.dot), а дальше программно создаем документ на основании этого шаблона и подставляем в него необходимые данные.

Соответственно, шаблоны хранятся на сети, в определенной папке.

При переходе на MS Office 2007 возникла проблема: не формировался документ на основании шаблона. Было выяснено, что виной всему было наличие в вызове полного пути к шаблону.

Решилась данная проблема настройкой самого MS Word, для этого в настройках MS Word переопределяем путь к шаблонам (где на сети лежат .dot-файлы)

  • Открываем MS Word
  • Создаем пустой документ
  • Нажимаем кнопку “Office”
  • Выбираем «Параметры Word»
  • Выбираем «Дополнительно»
  • Нажимаем кнопку «Расположение файлов…»
  • Изменяем путь к общим шаблонам
  • Успешно выходим
  • Если будет выводиться ошибка о невозможности прочитать/записать шаблон Normal.dotm, то надо указать/изменить на локальную папку путь для пользовательских шаблонов (C:\Documents and Settings\…\My Documents)
  • Возможно, надо будет запустить MS Word и выйти из него, при этом шаблон Normal.dotm автоматически создастся в текущей папке пользовательских шаблонов.

После чего при вызове убираем путь к шаблону.

В MS Office 2010:

  • Открываем MS Word
  • Создаем пустой документ
  • Переходим на закладку «Файл»
  • Выбираем «Параметры»
  • Выбираем «Дополнительно»
  • далее как описано выше