Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Печать страницы на определенный принтер


Автор: programmister 20.4.2007, 00:29
Всем привет!

Возникла проблемка. Весь деньпровозился, а так и не смог ничего сделать.  
Нужно из JavaScript распечатать текущую страницу на орпеделенный принтер (без окна выбора, а скриптом, и не на принтер по умолчанию), например, по его имени, или ещё каким-нибудь параметрам, которые тоже можно вынуть с помощью JS.

Нашел на этом форуме http://forum.vingrad.ru/topic-106584.html.

Там хорошо всё описано. Но возникла новая проблемка.

Пишу в VBScript:

Код

    set WshShell = CreateObject("WScript.Shell")
    defaultPrinter = WshShell.RegRead(regPathWinNT)

    p = "Printer 11,winspool,LPT3:"
    WshShell.RegWrite regPathWinNT, p 
    WB.ExecWB 6, 2

    p = "HP DeskJet 959C,winspool,LPT1:"
    WshShell.RegWrite regPathWinNT, p
    WB.ExecWB 6, 2

    p = "Printer 10,winspool,LPT2:"
    WshShell.RegWrite regPathWinNT, p
    WB.ExecWB 6, 2

    p = "HP DeskJet 959C,winspool,LPT1:"
    WshShell.RegWrite regPathWinNT, p
    WB.ExecWB 6, 2

    p = "Printer 11,winspool,LPT3:"
    WshShell.RegWrite regPathWinNT, p
    WB.ExecWB 6, 2

    WshShell.RegWrite regPathWinNT, defaultPrinter
    set WshShell = nothing


WB соответственно <object ID="WB" WIDTH=0 HEIGHT=0 CLASSID="clsid:8856F961-340A-11D0-A96B-00C04FD705A2" VIEWASTEXT></object>

После первого прогона почти как попадет. То есть некоторые распечатки попадают не на тот (по коду) принтер.

Если не перезапуская броузер (IE 7) повторить, то будет печатать всё с "Printer 11,winspool,LPT3:".
Короче фигня какая-то творится.

Как можно вылечить?

Подскажите, пожалуйста!

Автор: WIPS 20.4.2007, 11:55
Цитата(programmister @  19.4.2007,  23:29 Найти цитируемый пост)
То есть некоторые распечатки попадают не на тот (по коду) принтер.

Это может происходить из-за того, что у вас сразу после изменений в реестре идет печать. Не знаю как ведет себя VB, но, например JS, точно не будет дожидаться пока выполнится
Код

WshShell.RegWrite regPathWinNT, p

т.е. вызов то конечно выполнится, но произойдет ли рельно смена ключа реестра до начала выполнения 
Код

WB.ExecWB 6, 2

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


Цитата(programmister @  19.4.2007,  23:29 Найти цитируемый пост)
Если не перезапуская броузер (IE 7) повторить, то будет печатать всё с "Printer 11,winspool,LPT3:".

Тут надо прогонять пошагово, смотреть че пишется или не пишется в реестр. А мож это вобще забубоны IE7, я с ним пока не работал :(

Автор: programmister 20.4.2007, 11:58
Пошаогво проверял, реестр меняется, но всё равно отсылает не на тот принтер.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)