为什么从IFrame打印页面时会看到不同的字体大小?

时间:2009-04-07 20:11:02

标签: asp.net javascript html css printing

我有一个简单的基于表格的HTML页面,其中包含非常简单的样式表。我可以在IE7和FireFox 3中打开页面,它看起来完全一样。我可以从两个浏览器打印页面,它看起来完全一样。我们将调用页面“ProblemPage.htm”

现在,在ASP.Net页面中,我创建了一个IFrame并将该HTML加载到IFrame中,如下所示:

window.frames[iframeId].location.href = "../ProblemPage.htm";

当用户单击ASP.Net页面上的按钮时,它会调用执行此操作的函数:

window.frames[iframeId].focus();
window.frames[iframeId].print();

当我这样做并打印出来时,Firefox版本与我单独加载页面并打印时的版本完全相同。 IE7版本将所有字体大小减少到大约一半。

请注意,页面设置设置几乎都是默认设置。我使用了不同的打印机并直接打印到PDF。我已经反复清除了我的缓存,以确保我使用相同的CSS。然而在同一个IE7会话中,页面本身打印一种方式,通过IFrame打印的页面如上所示打印较小的字体。在单个Firefox会话中,页面本身打印的内容与通过IFrame打印的页面完全相同。

有什么想法吗?当我在IE上打印它或者IE正在解释IFrame中不同的样式时,我的某些样式可能会“泄漏”到页面中。

更新

嗯,我想这不是“泄漏风格”。如果我将Yahoo CSS重置放在ProblemPage.css文件中,那么在所有四种情况下它都会被两个浏览器选中,但问题仍然存在:当IE从IFrame打印页面时,字体大小被搞砸了。

更新2

从未发现问题。更简单的测试项目没有显示相同的问题,我怀疑母版页,主题或类似的东西可能存在问题。有趣的是,问题并没出现在IE6上,只是IE7。

我只是通过有条件评论的IE浏览器来解决这个问题。这是我必须使用条件CSS的整个应用程序的唯一部分。

仍然希望得到一个答案(或者甚至是几个关于接下来要寻找什么的WAG)。

5 个答案:

答案 0 :(得分:1)

确保您尝试打印的页面引用了正确的样式表。如果不是某些浏览器可能会拉入父级,而其他浏览器可能不会。

答案 1 :(得分:1)

当你描述“较小的字体大小”时,它让我想起了我在CSS中有一个堆叠的“font-size:0.8em”特定的场景。通过堆叠我的意思是显示特别小的文本是在其上具有EM字体大小的父元素内部,并且它本身具有一个。

我不希望iframe发生这种情况,但我想我会把它扔出去以防万一。

答案 2 :(得分:1)

听起来很奇怪。没有在线测试很难诊断,但是:

  • 如果你在父页面的JavaScript中使用window.print()会发生同样的事情吗?

  • 如果没有,如何让子帧调用函数或在父帧的脚本中设置变量,然后(当通过超时或轮询返回控件到父页时)调用print()在它自己的窗口?

答案 3 :(得分:0)

下午好! 如果您仍有问题,请尝试这篇文章.. 它对我有用。

http://bytes.com/topic/misc/answers/629926-ie7-printing-iframe-solution

答案 4 :(得分:0)

你可以试试这个:

function pr(frameId){
    var printed;
    var iframe = document.getElementById(frameId);
    var ifWindow = iframe.contentWindow || iframe;
    ifWindow.focus();

    try {
        var printed =ifWindow.execCommand('print', false, null);
    } catch (e) {

    }

    if (! printed) {
        ifWindow.print();
    }
}