Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Скрипт для печати документов Word 
Author Message
Batya



PostPosted: Tue Dec 16, 2008 14:00    Post subject: Reply with quote

xls как-то не вставало задачи печатать из командной строки, а doc и txt печатаю собственным скриптом:
Code:
'==========================================================================
'Печать документа с помощью MS Word
'Параметры:
'{Файл} [{Принтер}|"" [{Кодовая страница}|"" [{Количество копий}]]]
'Пример параметров:
'C:\Temp\Test.txt \\Host\HostPrinter 1251
'Для использования значений по умолчанию принтера или кодовой страницы
'  можно указать двойные кавычки ("")
'Пример параметров:
'C:\Temp\Text_default.txt
'C:\Temp\Text_dos.txt "" 866
'C:\Temp\Text_3_copies.txt "" "" 3
'==========================================================================
Option Explicit
'================= Изменяемые параметры ===================================
Const TimeLimit = 30      'Время ожидания окончания печати в сек.
Const Margin    = 1.5     'Поля в см
Const Admin     = "admin" 'Имя компьютера сис. админ-а
Const ShowMess  = False   'Показывать ли текст ошибки на текущем компе
'==========================================================================
Dim objW, Mess, MarginPt, File, Ext, StartTime, CodeStr, Copies
'Дюймы, выраженные в см., для вычисления полей
Const Inch = 2.538
'Задаем массив сообщений
DefineMess
'Включаем режим ручной обработки ошибок
On Error Resume Next
'Создаем объект Word
Set objW = WScript.CreateObject("Word.Application")
CheckErr(0)
'Первый параметр - открываемый файл
File = WScript.Arguments(0)
CheckErr(1)
'Открываем файл в кодировке, заданной третим параметром
If WScript.Arguments.Count > 2 Then
  CodeStr = WScript.Arguments(2)
  If Len(CodeStr) <> 0 Then
    objW.Documents.Open File,,1,,,,,,,,CodeStr
  Else
    objW.Documents.Open File,,1
  End If
Else
  objW.Documents.Open File,,1
End If
CheckErr(1)
'Вычисляем поля (задаются в пунктах - 1/72 дюйма)
MarginPt = Margin/Inch * 72
'Задаем поля для всех файлов, кроме *.doc и *.rtf
Ext = LCase(CreateObject("Scripting.FileSystemObject").GetExtensionName(File))
If Not ((Ext = "doc") Or (Ext = "rtf")) Then
  With objW.ActiveDocument.PageSetup
    .LeftMargin   = MarginPt
    .RightMargin  = MarginPt
    .TopMargin    = MarginPt
    .BottomMargin = MarginPt
  End With
  CheckErr(2)
End If
'Если задан второй параметр, то это принтер
If WScript.Arguments.Count > 1 Then
  'Устанавливаем принтер, если параметр не пустой
  If Len(WScript.Arguments(1)) > 0 Then
    'Устанавливаем текущий принтер - второй параметр
    objW.ActivePrinter = WScript.Arguments(1)
    'Небольшая пауза
    WScript.Sleep 100
    CheckErr(3)
  End If
End If
'Количество копий
If WScript.Arguments.Count > 3 Then
  Copies = WScript.Arguments(3)
Else
  Copies = 1
End If
'Печатаем в фоне
objW.PrintOut 1,,,,,,,Copies
CheckErr(4)
'Включаем таймер ожидания окончания печати
StartTime = Timer
'Ждем, пока закончится печать
Do Until objW.BackgroundPrintingStatus = 0
  'Если ожидаем уже больше заданного лимита
  If (Timer - StartTime) > TimeLimit Then
    'Генерим ошибку
    Err.Raise vbObjectError + 1, Mess("Title"), Mess("Err1")
    CheckErr(5)
  End If
  'Пауза 0.1 сек.
  WScript.Sleep 100
Loop
'Закрываем Word
objW.Quit 0
CheckErr(6)
'Отключаем режим ручной обработки ошибок
On Error Goto 0

'Выход
Quit

'Процедура задания массива сообщений
Sub DefineMess
  Set  Mess = CreateObject("Scripting.Dictionary")
  With Mess
    .Add "Title", "Печать документа"
    .Add "Err1" , "Время ожидания окончания печати превысило заданный лимит. Печать прервана!"
    .Add 0      , "При создании объекта Word возникла ошибка:"
    .Add 1      , "Ошибка открытия файла:"
    .Add 2      , "Ошибка задания полей:"
    .Add 3      , "При установке активного принтера возникла ошибка:"
    .Add 4      , "При выполнении печати документа возникла ошибка:"
    .Add 5      , "Ошибка выполнения печати."
    .Add 6      , "Ошибка закрытия документа. Закройте документ вручную."
  End With
End Sub

'Процедура проверки ошибок
Sub CheckErr(Step)
  'Если произошла ошибка
  If Err.Number <> 0 Then
    'Посылаем сообщение на компьютер Admin
    CreateObject("WScript.Shell").Run "net send " & Admin & " " &_
      Mess(Step) & vbNewLine & vbNewLine & Err.Description, 7, False
    'Выводим сообщение на текущем компьютере
    If ShowMess Then
      MsgBox Mess(Step) & vbNewLine & vbNewLine & Err.Description, _
        vbOKOnly + vbCritical, Mess("Title")
    End If
    'Закрываем Word, если открыт
    If (Step > 0) And IsObject(objW) Then
      objW.Quit 0
    End If
    Quit
  End If
End Sub

Sub Quit
  Set Mess = Nothing
  Set objW = Nothing
  WScript.Quit
End Sub

Только бывают проблемы при печати на принтер НЕ по умолчанию - Word глючит.
_________________
Нет, я не сплю. Я просто медленно моргаю.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group