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
- Возможно, вам придется выбрать "Общий/только текст" (или как бы не назывался ваш чековый принтер)