Автоматическая печать изображения с веб-сайта

Сотрудник и я обсуждали, что есть и что не возможно в браузере.

Тогда возник вопрос, который никто из нас не мог ответить с уверенностью.

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

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

Можно ли обойти этот шаг? Или просто фантазии script, чтобы переместить мышь над кнопкой печати и нажать на нее? Или использовать элемент управления ActiveX для непосредственного взаимодействия с API-интерфейсом принтера?

Ответ 1

Вы должны попросить пользователя распечатать текущую страницу, нет способа обойти этот шаг (возможно, в activeX для IE). Тем не менее, существует два разных способа заставить пользователя печатать изображения, которые вы улыбаетесь при загрузке страницы.

Вот как это сделать в JavaScript.

window.onload = function() {
  var img = window.open("me-smiling.png");
  img.print();
}

А вот как это сделать в css/javascript/html (если у вашей фотографии есть id 'меня-улыбающийся'): CSS:

@media print {
   * {
     display:none;
   }
   img#me-smiling {
     display:block;
   }
}

JavaScript:

 window.onload = function() { window.print() }

Ответ 2

Единственное решение, которое я обнаружил, чтобы избежать диалогового окна печати, было создание переменной в Mozilla Firefox для установки автоматической печати. Возможно, это не лучшее решение, если вам нужно использовать другой браузер, но в моем случае мне нужно только распечатать отчет автоматически и он работает:

1- Откройте Firefox и введите "about: config" в адресной строке
2- Щелкните правой кнопкой мыши по любому предпочтению и выберите "Создать" > "Логический"
3- Добавьте переменную с именем "print.always_print_silent" с "истинным" значением
4 Перезапустите Firefox.

Надеюсь помочь вам!

Ответ 3

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

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

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

Ответ 4

Вы не можете обойти диалоговое окно печати, насколько я знаю. Это было бы довольно очевидным недостатком безопасности, если бы браузер разрешил это. Но вы можете открыть диалог печати с помощью "window.print()".

Ответ 5

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

Ответ 6

Чтобы автоматически распечатывать принтер по умолчанию, не видя подсказки диалогового окна печати, я поделился некоторым кодом в следующем вопросе, который работает в IE7, IE8 и IE9:

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

Ответ 7

Насколько я знаю, невозможно напрямую печатать документ без вмешательства клиента, например, устанавливать флаги браузера. В нашем текущем проекте нам нужно печатать непосредственно на принтере по умолчанию, но, по крайней мере, с помощью Chrome вы можете легко сделать это с дополнительными аргументами запуска.

Для печати непосредственно на принтер по умолчанию ОС вы можете использовать:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir=c:\tmp --kiosk-printing http://www.contoso.com

Другим вариантом, который также может быть полезным, является использование диалогового окна native print вместо предварительного просмотра хромовых изображений.

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir=c:\tmp --disable-print-preview http://www.contoso.com

Обратите внимание, что window.print() и/или Ctrl-P ведут соответственно указанные настройки.

Я знаю, что это точно не отвечает на вопрос OPs, но я думаю, что это несколько связано, и для веб-приложений для предприятий это довольно распространенный случай использования. Может быть, кому-то это будет полезно.

Для Firefox я рекомендую "Бесшовная печать"

Ответ 8

Из многих поисков за последние несколько дней, Я нашел наилучшее решение. До сих пор Chrome не поддерживает прямую печать с javascript. Он запустил USB и последовательный API, которые могут помочь.

Но в настоящее время я использую решение JavaApplet, которое является открытым исходным кодом. https://github.com/qzind/qz-print - построить Пока я получаю ошибку в ее создании. Я предпочел Prebuilt - QZ Print Plugin 1.9.3 настольное приложение, которое отлично работает.

Загрузите его здесь: https://qz.io/download/

Пример кода:

/***************************************************************************
 * Prototype function for printing an HTML screenshot of the existing page
 * Usage: (identical to appendImage(), but uses html2canvas for png rendering)
 *    qz.setPaperSize("8.5in", "11.0in");  // US Letter
 *    qz.setAutoSize(true);
 *    qz.appendImage($("canvas")[0].toDataURL('image/png'));
 ***************************************************************************/
function printHTML5Page() {
    $("#qz-status").html2canvas({
        canvas: hidden_screenshot,
        onrendered: function() {
            if (notReady()) { return; }
            // Optional, set up custom page size.  These only work for PostScript printing.
            // setPaperSize() must be called before setAutoSize(), setOrientation(), etc.
            qz.setPaperSize("8.5in", "11.0in");  // US Letter
            qz.setAutoSize(true);
            qz.appendImage($("canvas")[0].toDataURL('image/png'));

            //qz.setCopies(3);
            qz.setCopies(parseInt(document.getElementById("copies").value));

            // Automatically gets called when "qz.appendFile()" is finished.
            window['qzDoneAppending'] = function() {
                // Tell the applet to print.
                qz.printPS();

                // Remove reference to this function
                window['qzDoneAppending'] = null;
            };
        }
    });
}

Полный пример можно найти здесь: https://gist.github.com/bkrajendra/c80de17b627e59287f7c

Ответ 9

Это лучшее решение, которое я нашел для firefox: Существует эта удивительная надстройка Полная печать.

Он работает как прелесть.