2009-06-03 1 views
11

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

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

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

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

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

+1

Вы можете отправить печать без отображения диалогового окна печати. К сожалению, это может быть только для IE. Надеюсь, это поможет немного: http://stackoverflow.com/questions/1096862/print-directly-from-browser-without-print-popup-window –

ответ

5

Вы должны запросить пользователя распечатать текущую страницу, нет возможности обойти этот шаг (возможно в 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() } 
+1

Есть ли какой-нибудь способ для этого иметь два больших пальца вверх? – DevinB

+10

Нет, браузеры не поддерживают печать фотографий с двумя большими пальцами (IE поддерживает один большой палец) – tj111

1

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

+3

Просто потому, что это будет «недостатком безопасности», не означает, что это еще не проблема безопасности. – DevinB

+0

Я уже сталкивался с этим требованием. Это было автоматически печатать заказы на еду в службе доставки горячих блюд из онлайн-заказов. Они просто хотели, чтобы приказ вышел на бумаге и не нужно было признавать. Новый диапазон «облачных принтеров», который я вижу недавно, также предоставляет этот бизнес-объект, но обходит браузер. – Jason

1

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

4

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

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

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

+0

Это не только интересно, но и показывает, что на самом деле есть бизнес-пример того, о чем я просил. Что-то, о чем я не знал в то время. – DevinB

1

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

Bypass Printdialog in IE9

6

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

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

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

+0

Это сработало. Благодарю. :-) –

1

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

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

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

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

"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 Я рекомендую Seamless Print Addon

0

От многих поиска в последние несколько дней, я нашел наилучшее решение. До сих пор 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

0

Это лучшее решение, которое я нашел для светлячок: Это замечательное дополнение Seamless Print.

Это работает как шарм.

+0

Не идеальный ответ. Прочтите рекомендации по ответам на странице https://stackoverflow.com/help/how-to-answer –

+0

Спасибо @AmitP. Я улучшусь. – Josiah