Как распечатать HTML-документ из С# или javascript без подтверждения пользователя?

Я хотел бы отправить задание на печать на принтер, чтобы пользователю не приходилось нажимать «ОК» в диалоговом окне подтверждения печати.

Подойдет либо C# code-behind, либо javascript, в зависимости от того, что работает лучше.

Итак... Я знаю, что можно распечатать HTML-документ, но можно ли напечатать без нажатия кнопки "ОК" пользователем?

  • Причина, по которой я спрашиваю об этом, заключается в том, что задание печати распечатывает документ 100 раз, динамически вставляя значения формы. (Представьте, что вы распечатываете открытку с благодарностью для 100 человек и не хотите сами менять имя 100 раз). Если пользователю необходимо подтвердить задание на печать для каждого из этих документов, для завершения только одного задания на печать потребуется некоторое время. А теперь представьте, если бы за один день поступило 100 заданий на печать! Это один человек тратит часы только на то, чтобы нажать «хорошо» 10000 раз.

Примечание. Только один человек должен будет использовать печатную форму, поэтому, если речь идет о снижении безопасности в браузере, это сработает. Мне просто нужен способ, чтобы все 100 отпечатков проходили без подтверждения каждого из них (даже 1 подтверждение на 100 было бы хорошо, но документ все равно должен меняться каждый раз).


person Matt    schedule 11.08.2009    source источник
comment
Имеет ли значение, какое программное обеспечение (например, какой браузер или HTML-совместимый редактор) используется?   -  person ChrisW    schedule 12.08.2009


Ответы (4)


Из любого крупного браузера — я уверен, что вы не сможете.

Вы можете создать приложение WinForm, в которое встроен элемент управления WebBrowser, и печатать оттуда без подтверждения пользователя (если я правильно помню, у объекта есть метод Print).

person Austin Salonen    schedule 11.08.2009
comment
И слава богу, что браузеры этого не позволяют! Только представьте, какой хлам будет выбрасывать ваш принтер, если рекламные агентства пронюхают об этом... - person Ruben; 12.08.2009
comment
Я полностью согласен. Было бы неплохо, если бы это была функция безопасности, которую можно было бы отключить в случае необходимости... - person Matt; 12.08.2009

Я нашел этот вопрос, когда искал решение этой проблемы, и я публикую его здесь, по крайней мере, для собственной справки. Это можно сделать довольно просто в Firefox (проверено с версией 3.5):

  • Перейдите в about:config в адресной строке Firefox.
  • Щелкните правой кнопкой мыши первый параметр, перейдите к новому -> логическое значение -> добавьте «print.always_print_silent» -> значение «true»
  • Перезапустите Firefox

Теперь, если вы вызываете window.print() из javascript, страница распечатывается без предварительного подтверждения.

Источник: http://forums.mozillazine.org/viewtopic.php?f=40&t=48336&start=0

person Max    schedule 20.10.2009
comment
Большое спасибо за этот трюк, он идеально подходит для проекта, над которым я работаю! - person Zed-K; 26.02.2010

Если вы используете Internet Explorer 5.5 или более позднюю версию, это должно работать:

function printit(){ 
    var WebBrowser = '<OBJECT ID="WebBrowser1" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>'; 
    document.body.insertAdjacentHTML('beforeEnd', WebBrowser); WebBrowser1.ExecWB(6, -1); 
    WebBrowser1.outerHTML = ""; 
}
person Robert Harvey    schedule 11.08.2009
comment
По сути, то же самое, что сделало бы предложение Остина. Ссылка на OBJECT — это элемент управления WebBrowser. Команда InsertAdjacentHTML получает содержимое страницы. ExecWB(6, -1) выполняет команду Print без запроса. - person Robert Harvey; 12.08.2009

Почему бы не создать одну страницу со всеми 100 карточками и не распечатать ее, просто убедитесь, что у вас есть соответствующие разрывы страниц.

person Chris Chilvers    schedule 11.08.2009