Observação:
Isso foi relatado antes em #7711 e provavelmente em #6152, mas fechado incorretamente como corrigido ou não relevante
Configuração:
Etapas para reproduzir o problema:
Caso de teste
https://kleins05.github.io/pdf.js/test-ieiframe/
(carregue no IE11, clique no botão de impressão, verifique a saída de impressão)
Qual é o comportamento esperado?
O PDF no iframe deve ser impresso.
O que deu errado?
A página circundante é impressa.
O suporte de impressão no IE11 é limitado em geral, além disso, consulte a seção relevante do FAQ :
Embora a biblioteca e o visualizador padrão ainda devam funcionar no IE 11/Edge (não baseado no Chromium) por enquanto, algumas funcionalidades/recursos podem não estar disponíveis e o desempenho será pior em comparação com os navegadores modernos. No futuro, apenas bugs que impeçam completamente a execução da biblioteca e/ou do visualizador padrão serão aceitos.
Encontrei o motivo. Ao contrário de outros navegadores, window.print no IE faz com que o quadro/janela focado no momento seja impresso, não necessariamente aquele ao qual window
se refere. Usar document.execCommand evita isso.
Em web/pdf_print_service.js:187 em vez de print.call(window); usar:
var result = window.document.execCommand('print', false, null);
if (!result) {
print.call(window);
}
Se você aceitar uma solicitação pull apesar do suporte limitado ao IE11, estou disposto a criar uma. Avise.
Se você aceitar um pull request apesar de seu suporte limitado ao IE11,
Infelizmente, nunca aceitamos "hacks" de compatibilidade colocados na base de código principal, por vários motivos, como legibilidade/manutenção/desempenho, e esses sempre foram restritos a polyfills colocados em https://github.com/mozilla/pdf .js/blob/master/src/shared/compatibility.js
Além disso, neste momento, um bug precisa impedir o uso da biblioteca no IE11 para ser considerado válido. (Espere uma versão futura do PDF.js, que ainda será decidida até onde eu sei, para marcar o IE11 como explicitamente sem suporte e remover o pouco código de compatibilidade que resta. Historicamente, tentar oferecer suporte ao IE11 restringiu a capacidade de usar recursos JavaScript modernos , e forçou os contribuidores a gastar muito tempo dando suporte a um navegador essencialmente morto.)
Comentários muito úteis
Encontrei o motivo. Ao contrário de outros navegadores, window.print no IE faz com que o quadro/janela focado no momento seja impresso, não necessariamente aquele ao qual
window
se refere. Usar document.execCommand evita isso.Em web/pdf_print_service.js:187 em vez de print.call(window); usar:
Se você aceitar uma solicitação pull apesar do suporte limitado ao IE11, estou disposto a criar uma. Avise.