Internet explorer IE上的iframe.print与window.print-前者为小字体

Internet explorer IE上的iframe.print与window.print-前者为小字体,internet-explorer,iframe,printing,Internet Explorer,Iframe,Printing,在我们的web应用程序中,我们有几个页面的打印功能,我们采取的方法是将当前页面的内容放在全局可用的iframe文档中,并打印iframe(使用Javascript)。这在Firefox中非常有效,但在IE中,它以非常小的字体打印iframe,几乎无法读取 两种浏览器中应用的所有CSS都是相同的,我确保打印的HTML不会以任何方式溢出(使IE适合内容或其他东西)…而且IE打印非常小。有趣的是,如果我将打印逻辑更改为写入新窗口,然后执行window.print(),IE中的一切都可以正常工作,字体大

在我们的web应用程序中,我们有几个页面的打印功能,我们采取的方法是将当前页面的内容放在全局可用的iframe文档中,并打印iframe(使用Javascript)。这在Firefox中非常有效,但在IE中,它以非常小的字体打印iframe,几乎无法读取

两种浏览器中应用的所有CSS都是相同的,我确保打印的HTML不会以任何方式溢出(使IE适合内容或其他东西)…而且IE打印非常小。有趣的是,如果我将打印逻辑更改为写入新窗口,然后执行window.print(),IE中的一切都可以正常工作,字体大小与CSS所需/指定的一样大

有人在IE中遇到过类似的iframe.print()问题吗

谢谢你的帮助


尼廷是的,我们看到了同样的事情。如果我们直接打开同一页,它将按您的预期打印。当它被装入iframe并打印时,它会使所有内容都变小;不仅仅是字体


这是在Windows 7上使用IE9。

我采用的最终解决方案是使用window.print()而不是iframe.print()。

我在解决相同问题后发现了此线程。看起来这种行为在IE11中仍然存在。好消息是,我能够找到解决方案,而无需打开新窗口,然后调用
window.print()

诀窍是在IE中使用
document.execCommand
(一直工作到IE11),然后在其他浏览器中优雅地返回到
iframe.print()
。完整的解决方案可能如下所示(使用jQuery选择iframe,但这完全是可选的):

这个解决方案的灵感来自于一个关于IE7的非常古老的线程:。尽管如此,它仍然是相关的。

正如“Heston Liebowitz”所写,使用“execCommand”是一个好主意和解决方案。但是我会为IE设置if条件,因为这个问题只在IE的情况下出现。下面是我的建议:

// 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();
}

今天在IE上出现了小字体问题,为了解决这个问题,我简单地调整了我的打印功能:

$(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();
    }
  });
});

现在它似乎在IE、Chrome和Firefox上打印出同样的内容。张贴在这里,因为这个解决方案是我很难找到,所以希望这将有助于某人

你有任何特定于打印的CSS吗?最初没有,但我在没有任何帮助的情况下创建了一个。即使使用特定的打印CSS,IE也会以小字体打印iframe。这在IE 11.0.9600.16659上不适用。在尝试打印iframe的内容时,字体大小仍然很小。从非编程方面来说,当我转到设置->打印->页面设置并取消选中“启用收缩以适应”框时,文本大小返回到正常大小。该解决方案在Firefox中不起作用。看见我在Chrome和IE中测试解决方案时出错,它解决了这个问题,但直到我将代码发布到生产环境中,我才发现如何中断FF。我真傻。
$(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();
    }
  });
});