Бортовой журнал Ктулху
Если человек говорит, что он вас любит, это еще не значит, что он любит только вас.

Автоматическая печать из папки

Навеяно вот этой статьей.

Возникла необходимость печатать из-под линукса на вин-принтере Canon MF3228. Драйверов, соответственно, нет. Гуглеж выдавал очень много бесполезных результатов.

Согласно вот этой статье (ниже привожу ее текст), печать возможна, и даже работает, что лично мной подтвердилось, но с некоторыми нюансами, которые ниже предстоит разобрать.

На компьютере должен быть установлен Foxit Reader.

Файл со скриптом можно поместить в любое удобное место. Скрипт добавляется в автозапуск Windows, запускается и висит все время в памяти. 

В специально указанной папке постоянно проверяется наличие файлов, в этом случае *.pdf. Как только файл там появляется, скрипт отправляет его в печать на принтер, установленный по умолчанию.

Первый документ печатался без проблем, иногда и второй. Но обычно после первого скрипт зависал или работал некорректно (с VB дел не имел и желания особого нет).

Также периодически глючил Foxit Reader, который использовался как компонент в этой системе печати.

 

Так как я с VB дел не имел, пришлось подступиться к проблеме с другой стороны, т.е. гору тащить к Магомету, а именно: с помощью планировщика бороться с глюками, вызываемыми работой скрипта.

 

Скрипт запускается и висит в памяти.

 

Выдержка из статьи: "

 'On Error Resume Next
'Автоматическая печать PDF-файлов, появляющихся в определенной папке
'Глобальные переменные
Set gFSO = CreateObject("Scripting.FileSystemObject")
Set gShell = CreateObject("WScript.Shell")
'Папка, в которой скрипт ждет PDF-файлы (к этой папке (папкам) д.б. дан доступ по сети)
gWatchFolder = "D:\share_print\"
'Основной цикл
While true
 Set lFolder = gFSO.GetFolder(gWatchFolder)
 Set lFiles = lFolder.Files
 For Each lFile In lFiles
  PrintFile(gWatchFolder & lFile.Name)
 Next
 WScript.Sleep(1)
WEnd
 
'Функция печати конкретного pdf-файла
Sub PrintFile(pFileName)
 'Ждем некоторе время (пока файл до конца запишется) 
 WScript.Sleep(3)
 'msgbox(pFileName)
 'Мы (больше) не боимся пробелов :Р
 s = """C:\Program Files\Foxit Software\Foxit Reader\Foxit Reader.exe"" /p """ & pFileName & """"
 'msgbox (s)
 Call gShell.Run(s,0,true)
 gFSO.DeleteFile(pFileName)
 If gFSO.FileExists(pFileName) Then
  'Мало ли чего может случиться, лучше пусть у Иван Иваныча перестанет печатать, чем один файл много раз уйдет на принтер
  'msgbox("Не удалось удалить файл " & pFileName & "! Позвоните Василию по т. 123-456)
  WScript.Quit
 'Else
  'Пока не реализовано
  'ToLog("Файл " & lFileName & " удален.")
 End If
End sub

 

За скрипт прошу не пинать — писался быстро и чтоб заработало.

Пользователь просто нажимает в программе кнопку «Печать» — и через минуту забирает из принтера документ.
Виртуальных принтеров можно установить несколько и обозвать их произвольно. Главное — при переименовании принтера настройки нужно производить заново.

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

"

Как видно, ничего особо сложного нет, но не было бы так сложно, если бы было так просто. Скрипт периодически вызывает ошибку Foxit Reader`а, разбираться с которой очень не хочется, поэтому было принято решение на скрипт влиять извне. Планировщик http://www.xstarter.com/rus/ очень сильно в этом помог.

Для начала на компьютере должны быть установлены такие программы: Foxit Reader и Xstarter, VB-скрипт, который сканирует папку на наличие файлов (скрипт во вложении - print.vbs.zip).

Первая показывает PDF, вторая запускает задания по расписанию и борется с последствиями работы скрипта.

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

В главном окне видим дерево задач. Останавливаем все лишние, создаем новое задание.

Устанавливаем в календаре время и периодичность запуска.

Во вкладке "действия" видим очередное дерево со списком всевозможных действий.

В данном случае необходимо прибивать фоксит, который периодически зависает.

 

Вложения:
ФайлОписаниеРазмер файла:
Скачать этот файл (print.vbs.zip)print.vbs.zip 0.8 Кб
Рейтинг@Mail.ru
Яндекс.Метрика
Hosting Ukraine
Счетчик PR-CY.Rank
Счетчик PR-CY.Rank