2011-11-08 14 views
7

Nella nostra applicazione Web, abbiamo funzionalità di stampa per un paio di nostre pagine e l'approccio che adottiamo è di mettere il contenuto della pagina corrente in un iframe disponibile a livello globale documenta e stampa l'iframe (usando Javascript). Funziona perfettamente in Firefox ma in IE stampa l'iframe con un font molto piccolo, quasi illeggibile.iframe.print vs. window.print su IE - carattere piccolo nell'ex

Tutti i CSS applicati in entrambi i browser sono uguali, mi sono assicurato che l'HTML in fase di stampa non trabocchi in alcun modo (rendendo IE adatta al contenuto o qualcosa del genere) ... e comunque la stampa IE è molto piccola. È interessante notare che se cambio la logica di stampa per scrivere in una nuova finestra e poi faccio window.print(), tutto funziona perfettamente anche in IE e il font è grande quanto richiesto/specificato dal CSS.

Qualcuno ha riscontrato un problema simile con iframe.print() in IE?

Grazie per l'aiuto.

Nitin

+0

Hai qualche CSS specifico per la stampa? –

+0

Inizialmente non l'avevo ma ne ho creato uno senza alcun aiuto. Anche con una stampa specifica, CSS IE stampa l'iframe in caratteri piccoli. – legendofawesomeness

risposta

0

soluzione finale che ho adottato è stato quello di utilizzare window.print() al posto di iframe.print().

1

Sì, stiamo vedendo la stessa cosa. Se apriamo direttamente la stessa pagina, essa stampa come ci si aspetterebbe. Quando viene caricato in un iframe e stampato, rende tutto più piccolo; non solo il font.

Questo sta usando IE9 su Windows 7.

4

Ho trovato questa discussione dopo aver affrontato lo stesso problema. Sembra che questo comportamento persista anche in IE11. La buona notizia è che sono stato in grado di trovare una soluzione senza ricorrere all'apertura di una nuova finestra e quindi chiamando window.print().

Il trucco è utilizzare document.execCommand in IE (funziona fino a IE11) e ricorrere con grazia a iframe.print() in altri browser. La soluzione completa potrebbe essere simile a questa (utilizzando jQuery per selezionare un iframe, ma questo è del tutto facoltativo):

var target = $('iframe')[0]; 
try { 
    target.contentWindow.document.execCommand('print', false, null); 
} catch(e) { 
    target.contentWindow.print(); 
} 

Questa soluzione è stata ispirata da un filo molto antico su IE7 da qui: http://bytes.com/topic/misc/answers/629926-ie7-printing-iframe-solution. È ancora rilevante, però.

+0

Questo non ha funzionato per me su IE 11.0.9600.16659. La dimensione del carattere è ancora piccola quando si tenta di stampare il contenuto di un iframe. – justanotherprogrammer

+1

Da un lato non programmatico, quando sono andato alle impostazioni -> stampa -> impostazione pagina e deselezionata la casella 'Abilita Riduci-a-misura', la dimensione del testo tornava alla dimensione normale. – justanotherprogrammer

+0

La soluzione non funziona in Firefox. Vedi [contentWindow.document.execCommand ('print', false, null) non funziona in firefox] (http://stackoverflow.com/questions/25323371/contentwindow-document-execcommandprint-false-null-not-working-in-firefox). Ho fatto l'errore della soluzione di test in Chrome e IE e ho risolto questo problema, ma non ho scoperto la rottura di FF fino a quando non ho rilasciato il codice per la produzione. Silly me. – Karl

0

Come "Heston Liebowitz" ha scritto, l'uso di "execCommand" è una buona idea e una soluzione. Ma imposterei la condizione if per IE, perché questo problema appare solo in caso di IE. Qui di seguito è il mio suggerimento:

// Get the iframe element 
var oIFrame = $('#iF_Print').get(0); 
// Fix for IE : Allow it to render the iframe 
oIFrame.focus(); 

var bMS_IE = false; 
// Verify whether the browser is Internet Explorer (IE8,IE9,IE10 -> "msie", but for IE11 the name is changed into "trident"). 
var userAgent = window.navigator.userAgent.toLowerCase(); 
bMS_IE = ((userAgent.indexOf('msie ') > -1) || (userAgent.indexOf("trident/") > -1))?true:false; 

if (bMS_IE) { 
     try { 
      oIFrame.document.execCommand('print', false, null); 
     }catch(e) { 
      window.print(); 
     } 
}else { 
    oIFrame.print(); 
} 
3

stava avendo la piccola stampa sul problema IE oggi, e per fissare ho regolato semplicemente la mia funzione di stampa come così:

$(document).ready(function(){ 
$("#printFrame").click(function(){  
    if (document.queryCommandSupported('print')) 
    { 
     $("#iframe").get(0).contentWindow.document.execCommand('print', false, null); 
    } 
    else 
    { 
     $("#iframe").get(0).contentWindow.focus(); 
     $("#iframe").get(0).contentWindow.print(); 
    } 
    }); 
}); 

Ora sembra di stampare la stessa su IE, Chrome e Firefox. Inserito qui perché questa soluzione è stata difficile da trovare, quindi spero che questo possa aiutare qualcuno.

Problemi correlati