HTML/Javascript One Click Print (без диалогов)

Возможно ли иметь параметр печати, который обходит диалоговое окно печати?

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

Из того, что я читаю, способ сделать это зависит от каждого браузера. Например, IE будет использовать ActiveX. Для Chrome/Firefox потребуются расширения. Исходя из этого, кажется, мне нужно написать приложение на С++, которое может обрабатывать параметры, передаваемые браузером, для автоматической печати с правильным форматированием (для меток). Тогда мне придется переписать его как расширение для Chrome/Firefox. Конечным результатом является то, что пользователям нашей закрытой системы придется загружать/устанавливать эти функции в зависимости от того, какой браузер они используют.

Я надеюсь, что есть еще один способ сделать это, но эта задача, скорее всего, нарушает проблемы безопасности браузера.

Ответ 1

В результате я создал пользовательское приложение, которое очень похоже на Nexus Mod Manager. Я написал приложение С#, которое регистрирует пользовательский Схема URI приложения. Вот как это работает:

  • Пользователь нажимает "Печать" на веб-сайте.
  • Веб-сайт связывает пользователя с "CustomURL://Print/{ID}
  • Приложение запускается через окна через пользовательскую схему uri.
  • Приложение связывается с предварительно настроенным сервером для подтверждения запроса на печать и в моем случае получает фактическую команду печати. ​​
  • Затем приложение использует класс С# RawPrinterHelper для отправки команд непосредственно на принтер.

Этот подход потребовал первоначальной загрузки от пользователя и одного запроса безопасности из окон при запуске приложения в первый раз. Я также внедрил некоторую магию Javascript, чтобы определить, было ли обработано задание на печать или нет. Если это не так, попросите их загрузить приложение.

Ответ 2

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

Этот эффект Sub Print эффективно заменяет функцию печати по умолчанию.

<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>

Затем используйте Javascript window.print(); ссылки на гиперссылку или кнопку для выполнения команды печати. ​​

Если вы хотите автоматически печатать, когда загружается страница, тогда поставьте код ниже рядом с тегом.

<script type="text/javascript"> 
window.onload=function(){self.print();} 
</script> 

Ответ 3

Общий ответ: НЕТ, вы не можете сделать это в общем случае, но есть случаи, когда вы можете это сделать. Проверьте http://justtalkaboutweb.com/2008/05/09/javascript-print-bypass-printer-dialog-in-ie-and-firefox/

Если вам разрешено делать такую ​​вещь в любом случае, это будет проблемой безопасности, поскольку вредоносное ПО script может спокойно отправлять задания печати на принтер посетителя.

Ответ 4

Я нашел потрясающий плагин Firefox, который решает эту проблему. попробуйте бесшовная печать плагин firefox, который выведет что-то из веб-приложения, не показывая диалог печати. ​​

  • Открыть Firefox
  • Поиск имени аддона без печати и его установка
  • После успешной установки окно печати будет обходить, когда пользователь хочет что-либо напечатать.

Ответ 5

Я пишу этот ответ для браузера Firefox.

  • Откройте Файл> Параметры страницы

  • Сделайте все колонтитулы пустыми

  • Установите поля на 0 (ноль)

  • В адресной строке Firefox введите about: config

  • Найдите print.always_print_silent и дважды щелкните его

  • Измените его с ложного на истинный

    • Это позволяет пропустить всплывающее окно "Печать", а также пропустить шаг, на котором нужно нажать кнопку "ОК", и автоматически распечатать квитанцию нужного размера.
  • Если print.always_print_silent не подходит

    • Щелкните правой кнопкой мыши на пустой области окна настроек

    • Выберите new> Boolean

    • Введите "print.always_print_silent" в качестве имени (без кавычек)

    • Нажмите ОК

    • Выберите true для значения

  • Вы также можете проверить, что указано для print.print_printer

    • Возможно, вам придется выбрать "Общий/только текст" (или как бы не назывался ваш чековый принтер)