1

Тема: WSH: печать документа из IExplorer

Пытаясь автоматизировать рутинные процессы столкнулся с проблемой:
мне необходимо каждый день распечатывать погоду в 3-х экземплярах.
с вызовом страницы проблем не возникло но на сайте необходимо перейти по ссылке "Печать", что бы вызвать версию для печати + в скрипте нужно указать принтер (на клиенте)
как это все в скрипте прописать. подскажите или ссылочку на ресурс где это описывается, а то я сам не могу найти. спасибо.

set WshShell=WScript.CreateObject("WScript.Shell")
WshShell.Run("http://www.*****.ru/towns/34723.htm")

2

Re: WSH: печать документа из IExplorer

А сайт с погодой секретный?
Опиши чуть подробнее, каким образом надо из скрипта печатать. Чтобы вообще без участия человека сразу на принтер? Или оператор должен работать с диалогом "Печать"?

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

3

Re: WSH: печать документа из IExplorer

сайт не секретный, просто на некоторых форумах это расценивается как реклама и удаляется.
вообще - gismeteo.ru
да, в этом то и весь смысл, чтоб я забыл про эту погоду. шедулер сделать и все. нужно 3 копии делать.

4

Re: WSH: печать документа из IExplorer

Понятно. Сайт посмотрел, и если честно, мне эта задача кажется не совсем простой. Подумаю...

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

5

Re: WSH: печать документа из IExplorer

Вот так можно распечатать погоду из RSS:

Set WshShell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set txtStream = FSO.CreateTextFile("C:\Temp\weather.txt", True)
Set xmlParser = CreateObject("Msxml2.DOMDocument")
xmlParser.async = False
xmlParser.load "http://informer.gismeteo.ru/rss/34723.xml"
'получаем все элементы "item"
Set colNodes = xmlParser.selectNodes("//item")
For Each nodeNode In colNodes
    'заголовок
    Set nodeTitle = nodeNode.selectSingleNode("title")
    txtStream.WriteLine nodeTitle.text
    'содержимое
    Set nodeDescr = nodeNode.selectSingleNode("description")
    txtStream.WriteLine nodeDescr.text
    'пустая строка
    txtStream.WriteLine
Next
txtStream.Close
For i=1 To 2
    WshShell.Run "notepad /p C:\Temp\weather.txt", 0, True
Next
FSO.DeleteFile "C:\Temp\weather.txt"
Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

6

Re: WSH: печать документа из IExplorer

Ещё вариант:

Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate "http://pda.gismeteo.ru/e34723.htm"
While objIE.Busy
    Wscript.Sleep 200
Wend
objIE.Visible = 1
'objIE.ExecWB 6, 1 'выдача диалога печати
objIE.ExecWB 6, 2 'немедленная печать
Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

7

Re: WSH: печать документа из IExplorer

Вот, наверное, наиболее подходящий вариант (наиболее близкий к поставленной задаче):

Set objIE = CreateObject("InternetExplorer.Application") 
objIE.Navigate "http://www.gismeteo.ru/towns/34723.htm"
While objIE.Busy
    Wscript.Sleep 200
Wend
strHTML = objIE.document.script.prhdr & objIE.document.script.frc & "</body></html>"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set txtStream = FSO.CreateTextFile("C:\Temp\weather.htm")
txtStream.Write(strHTML)
txtStream.Close
objIE.Navigate "C:\Temp\weather.htm"
While objIE.Busy
    Wscript.Sleep 200
Wend
objIE.Visible = 1
For i=1 To 3
    objIE.ExecWB 6, 2 'немедленная печать
    WScript.Sleep 2000
Next
FSO.DeleteFile "C:\Temp\weather.htm"
Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

8

Re: WSH: печать документа из IExplorer

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

9

Re: WSH: печать документа из IExplorer

adm_tolik_in
Обрати внимание, что я печатаю на принтер по умолчанию, а не на произвольный. Если это проблема, её надо решать дополнительно.

правда так и не понял как удалось на форму печати выйти

Если ты имеешь в виду то окошко, которое открывается при нажатии на ссылку "Печать", то я просто посмотрел в код HTML-страницы (что она делает при нажатии на ссылку, а там просто кое-какой JavaScript), и сделал "то же самое". А именно - взял пару переменных, которые при загрузке "основной" страницы уже содержат нужный HTML-код для "страницы печати", и воспользовался ими (это переменные prhdr и frc). Т.е., если дизайн страницы сильно поменяют, работать это перестанет .

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

10

Re: WSH: печать документа из IExplorer

А некто не подскажет, как сделать чтобы в строке дописывался мой текст...
Например:

    Set nodeTitle = nodeNode.selectSingleNode("title")
    txtStream.WriteLine nodeTitle.text

nodeTitle.text = ТИТЛ-1 (к примеру)

Как сделать, чтобы было так:
Текст-до-титла ТИТЛ-1 текст-после-титла

Как изменить код?
Вот так например не получаеться)))

    Set nodeTitle = nodeNode.selectSingleNode("title")
    txtStream.WriteLine "Текст-до-титла" nodeTitle.text "текст-после-титла"

Помогите пожалусто. Я в VBS не разбираюсь!

11

Re: WSH: печать документа из IExplorer

Конкатенация строк - символ "&", а не просто пробел.

txtStream.WriteLine "Текст-до-титла" & nodeTitle.text & "текст-после-титла"
Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

12

Re: WSH: печать документа из IExplorer

2 The gray Cardinal
Человеческое спасибо!

13 (изменено: druni@, 2009-08-03 20:21:56)

Re: WSH: печать документа из IExplorer

Всем доброго времени суток.
Столкнулся с проблемой:
Требуется печатать страницы в "Альбомной ориентации"
По умолчанию в IE стоит "Книжная"
Как скриптом выставить требуемое так и не нашел решения (.

Из попыток:
В реестре, в HKCU есть раздел "Software\Microsoft\Internet Explorer\PageSetup"
в нем ключи margin_* всех сторон, как я понял отступы.
При изменении из меню IE смежные стороны смещаются наоборот  (тоесть меняется страница Книжная-Альбомная ориентации)
Изменяя заранее эти значения, страница продолжает печататься в "книжной" ориентации.

Заранее благодарен за какую либо помощь )

14

Re: WSH: печать документа из IExplorer

По оригинальному сообщению amel27:

amel27 пишет:
Loki3D пишет:

как можно изменить ориентацию листа с книжной на Альбомную

не так просто... учитывая, что IE не сохраняет ориентацию листа, а каждый раз считывает настройки с принтера, кроме того в KB236777 How to change print settings for Internet Explorer and the WebBrowser control programmatically in Internet Explorer недвусмысленно сказано, что программно эту настройку в IE изменить нельзя:

KB236777 пишет:

There might be a need to change the print settings of Internet Explorer or the WebBrowser control programmatically. The only settings that can be changed are page margins, and header and footer information. There is no supported way to change other settings like page orientation or printer.

тем не менее есть один вариант (кроме ручной перенастройки параметров принтера): сходить по этому [KB198901 — alexii] линку: SAMPLE: PageSet.exe Programmatically Changes Default Printer Orientation, скачать оттуда Pageset.exe, выдернуть из комплекта PageSet.dll и зарегистрировать его в системе через RegSvr32 - после этого COM-объект можно использовать в WSH. Слегка измененный VBS-скрипт, использующий функциональность "PageSet.PrinterControl" - перед печатью ориентация устанавливается на книжную, а после - восстанавливается на первоначальную…

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

Option Explicit

Const OLECMDID_PRINT              = 6
Const LECMDEXECOPT_DONTPROMPTUSER = 2

Dim objIE
Dim objPrinterControl

Dim boolDone


Set objIE             = WScript.CreateObject("InternetExplorer.Application", "IE_")
Set objPrinterControl = WScript.CreateObject("PageSet.PrinterControl")

objPrinterControl.ChngOrientationLandscape
objIE.Navigate "http://www.script-coding.com"

Do
    WScript.Sleep 100
Loop Until Not objIE.Busy

'objIE.Visible = True
objIE.ExecWB OLECMDID_PRINT, LECMDEXECOPT_DONTPROMPTUSER

boolDone = False

Do
    WScript.Sleep 100
Loop Until boolDone

objPrinterControl.ReSetOrientation
objIE.Quit

Set objPrinterControl = Nothing
Set objIE             = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub IE_PrintTemplateTeardown(ByVal pDisp)
    boolDone = True
End Sub
'=============================================================================