在我们的网络应用程序中,我们为几个页面提供了打印功能,我们采用的方法是将当前页面的内容放在全局可用的iframe文档中并打印iframe(使用Javascript)。这在Firefox中完全正常,但在IE中它以非常小的字体打印iframe,几乎不可读。
在两个浏览器中应用的所有CSS都是相同的,我确保打印的HTML不会以任何方式溢出(使IE适合内容或其他东西)......而且IE打印仍然非常小。有趣的是,如果我将打印逻辑更改为写入新窗口然后执行window.print(),那么IE中的一切工作正常,并且字体与CSS要求/指定的一样大。
IE中的iframe.print()有没有遇到过类似的问题?
感谢您的帮助。
尼丁
答案 0 :(得分:4)
我在解决同样的问题后找到了这个帖子。看起来这种行为即使在IE11中仍然存在。好消息是我能够找到一个解决方案而无需打开一个新窗口然后调用window.print()
。
诀窍是在IE中使用document.execCommand
(一直到IE11),然后在其他浏览器中优雅地回到iframe.print()
。完整的解决方案看起来像这样(使用jQuery选择iframe,但这完全是可选的):
var target = $('iframe')[0];
try {
target.contentWindow.document.execCommand('print', false, null);
} catch(e) {
target.contentWindow.print();
}
这个解决方案的灵感来自于一个关于IE7的旧线程:http://bytes.com/topic/misc/answers/629926-ie7-printing-iframe-solution。不过,它仍然具有相关性。
答案 1 :(得分:3)
今天在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上打印出相同的内容。发布在这里是因为这个解决方案对我来说很难找到,所以希望这会对某人有所帮助。
答案 2 :(得分:1)
是的,我们看到了同样的事情。如果我们直接打开同一页面,它会按照您的预期打印。当它在iframe中加载并打印时,它会使一切变小;不只是字体。
这是在Windows 7上使用IE9。
答案 3 :(得分:0)
我采用的最终解决方案是使用window.print()而不是iframe.print()。
答案 4 :(得分:0)
As" 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();
}