Печать напрямую из браузера без всплывающего окна печати

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

Подскажите, пожалуйста, какой вариант лучше и как это оформить (технология).

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

Спасибо.

EDIT: Печать должна быть отправлена ​​на принтер пользователя по умолчанию.


person Ramiz Uddin    schedule 08.07.2009    source источник
comment
Я уже предполагал, что такой вариант будет возможен для IE, если сделать элемент управления ActiveX. Но не помнил, что это можно было сделать и через vbscript. Мне повезло, и я нашел это: msdn.microsoft.com/en-us/library/ ms976105.aspx Я еще не пробовал, но это дает мне полезное напоминание, посмотрите, это может спасти меня от испачкания рук от ActiveX   -  person Ramiz Uddin    schedule 08.07.2009
comment
Я знаю, что эта тема была очень старой. Но, может быть, кто-то попытается это выяснить, пожалуйста, проверьте это: github.com/apinprasty/pulas   -  person Apin    schedule 22.07.2016
comment
Некоторые другие решения для печати через браузер доступны здесь: stackoverflow.com/a/28783269/3196753   -  person tresf    schedule 20.09.2016
comment
Для браузера Chrome вы можете сделать это: <script> $(() => { //That's it's a little workaround to print a page. The user must so press Enter to print, after this the dialog window close "automatically" window.print(); setTimeout(function(){ window.top.close(); }, 3000); }); </script>   -  person Marinpietri    schedule 01.02.2020


Ответы (7)


Я не мог найти решение для других браузеров. Когда я разместил этот вопрос, IE имел более высокий приоритет, и я с радостью нашел его для него. Если у вас есть решение для других браузеров (firefox, Safari, Opera), пожалуйста, поделитесь здесь. Спасибо.

VBSCRIPT намного удобнее, чем создание ActiveX на VB6 или C#/VB.NET:

<script language='VBScript'>
Sub Print()
       OLECMDID_PRINT = 6
       OLECMDEXECOPT_DONTPROMPTUSER = 2
       OLECMDEXECOPT_PROMPTUSER = 1
       call WB.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER,1)
End Sub
document.write "<object ID='WB' WIDTH=0 HEIGHT=0 CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'></object>"
</script>

Теперь звоню:

<a href="javascript:window.print();">Print</a>

отправит печать без всплывающего окна печати.

person Ramiz Uddin    schedule 14.07.2009
comment
Я попытался реализовать тот же самый код в Javascript, и это не сработало. Только в VBScript. Почему это работает в VBScript, но не в Javascript? - person Jordão; 14.09.2010
comment
@Jordao Я думаю, что указанные выше переменные конфигурации являются только членами vbscript. Здесь, в приведенном выше скрипте, мы в основном делаем сброс переменных конфигурации. Это просто инстинктивная мысль о вашем вопросе. - person Ramiz Uddin; 24.10.2010
comment
переменные, на которые вы ссылаетесь, являются просто константами. Они должны работать одинаково в Javascript. - person Jordão; 24.10.2010
comment
Есть ли способ распечатать страницу в iframe с помощью этого метода? - person ; 02.04.2015
comment
Это все еще работает? Я попробовал это, и я получил подсказку. - person Eric Wiener; 06.02.2017
comment
Я проверил в IE11, получив диалог печати. - person vasuy19; 07.03.2017
comment
Это отлично работает в IE. но в хроме снова отображается диалоговое окно печати - person Srinivasan; 14.07.2017
comment
не повезло с этим скриптом, я пробовал в IE 11, диалоговое окно печати запрашивает - person Naz141; 22.07.2018
comment
Вы можете использовать расширение для Chrome: chrome.google.com/ интернет-магазин/detail/chrome-direct-print/ - person Marinpietri; 15.07.2020

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

https://addons.mozilla.org/en-US/firefox/addon/attendprint/

С этой функцией вы можете использовать $('img').jqprint(); и jqprint для jquery будет печатать только то изображение, которое автоматически вызывается из вашего веб-приложения.

person Jon    schedule 21.09.2011

IE9 больше не поддерживает запуск VBScript Print() путем вызова window.print(), как это делают IE7 и IE8, и, таким образом, window.print() теперь всегда будет запускать диалоговое окно печати в IE9.

Исправление довольно простое. Вам просто нужно вызвать сам Print() вместо window.print() в событии onclick.

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

Вы можете найти этот пример кода здесь:

Обход диалога печати в IE9

person purefusion    schedule 27.09.2012

Я не верю, что это возможно. Отображаемое диалоговое окно позволяет пользователю выбрать принтер для печати. Итак, предположим, что ваше приложение может просто щелкнуть и распечатать, а пользователь щелкнет вашу кнопку печати, но у него есть два принтера, подключенных к компьютеру. Или, что более вероятно, этот пользователь работает в офисном здании с 25 принтерами. Как без этого диалогового окна компьютер узнает, на какой принтер печатать?

person Zachary Murray    schedule 08.07.2009
comment
Как насчет элемента управления ActiveX для IE, который будет отправлять печать на принтер пользователя по умолчанию. Это выглядит довольно выполнимо. Но тратить часы усилий на создание такого ActiveX не оправдано, чтобы предоставить функцию только пользователям IE. - person Ramiz Uddin; 08.07.2009
comment
Закари, приведенный выше сценарий отправляет команду печати на принтер по умолчанию, не показывая всплывающих окон. Но это только для IE. Надеюсь, это развеет наши сомнения :) - person Ramiz Uddin; 15.07.2009
comment
Ого, я даже не подумал использовать VBScript. Отлично, Рамиз. Если вы используете только IE, то все готово: D - person Zachary Murray; 16.07.2009
comment
Спасибо. Поиск все еще продолжается, так как существует длинный список браузеров, и это необходимо сделать во всех. Но IE имел более высокий приоритет, поэтому немного расслабился. - person Ramiz Uddin; 22.07.2009

это.печать (ложь);

Я пробовал это в Chrome, Firefox и IE. Он работает только в Firefox и IE, использует принтер по умолчанию (с настройками печати по умолчанию) и работает только при рендеринге PDF (я использую Foxit Reader с отключенным безопасным режимом чтения). Chrome показывает диалоговое окно печати, а также другие браузеры, когда я отображаю HTML-страницу.

person DannyC    schedule 20.12.2012

Для браузеров IE работает «решение VBScript».

Но, как упоминал @purefusion в Обойти диалог печати в IE9, используйте Print(), а не окно. Распечатать()

person pprain    schedule 16.03.2013

Это должно работать, я пробовал это сам, и это сработало для меня. Если вы передадите True вместо false, появится диалоговое окно печати.

this.print(false);
person Maddy    schedule 26.08.2010
comment
в java-скрипте нет метода print() с логическими параметрами. - person Gunjan Shah; 19.04.2013
comment
Даже если бы вы могли это сделать, по проприетарным причинам я бы не реализовал. Если это не конкретное приложение, используемое на работе определенной группой людей. Даже если представьте, если бы мой принтер автоматически печатал, просто посещая страницу и не подтверждая, что я хочу напечатать. 1. Я бы подумал, что это возможный вирус, так как меня даже не спросили, хочу ли я печатать. 2. Я бы потратил бесчисленное количество бумаги на машины людей. Что, если им нужна только 1 страница из 15-страничного отчета. КОНЕЦ УРОК: Печать не должна выполняться без прохождения протоколов печати. - person Spoo; 14.03.2014