Detectando evento de impressão do navegador

É possível detectar quando um usuário está imprimindo algo do navegador?

Para complicar, se estivermos apresentando um usuário com um documento PDF em uma nova janela, é possível detectar a impressão desse documento (assumindo que o usuário o imprime a partir da janela do navegador)?

O mais próximo que consegui encontrar é se implementarmos uma funcionalidade de impressão personalizada (algo parecido com isso ) e rastrear quando isso é invocado

Estou interessado principalmente em uma solução que funciona para o Internet Explorer (6 ou posterior)

Agora você pode detectar uma solicitação de impressão no IE 5+, no Firefox 6+, no Chrome 9+ e no Safari 5+ usando a seguinte técnica:

(function() { var beforePrint = function() { console.log('Functionality to run before printing.'); }; var afterPrint = function() { console.log('Functionality to run after printing'); }; if (window.matchMedia) { var mediaQueryList = window.matchMedia('print'); mediaQueryList.addListener(function(mql) { if (mql.matches) { beforePrint(); } else { afterPrint(); } }); } window.onbeforeprint = beforePrint; window.onafterprint = afterPrint; }()); 

Eu entro em mais detalhes sobre o que isso está fazendo e o que pode ser usado em http://tjvantoll.com/2012/06/15/detecting-print-requests-with-javascript/ .

Para o Internet Explorer, existem os events window.onbeforeprint e window.onafterprint mas eles não funcionam com nenhum outro navegador e, como resultado, geralmente são inúteis.

Eles parecem funcionar exatamente da mesma forma, por algum motivo, executando seus manipuladores de events antes que a janela de impressão seja aberta.

Mas, caso você queira mesmo assim, apesar dessas advertências, aqui está um exemplo:

 window.onbeforeprint = function() { alert("Printing shall commence!"); } 

Se for apenas para fins de rastreamento, talvez você possa definir uma URL de plano de fundo na mídia de impressão CSS para uma página do servidor (.aspx, .php, etc) e, em seguida, fazer algo no servidor?

Esse cara afirma que funciona.

Isso não é tão versátil quanto a solução do TJ, mas pode ser menos problemático (veja a postagem no blog do TJs para os problemas que ele encontrou) quando somente o rastreamento é necessário.