Почему при печати страницы из IFrame отображаются шрифты разных размеров? - PullRequest
4 голосов
/ 08 апреля 2009

У меня есть простая 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.

UPDATE

Ну, я думаю, это не "утечка стилей". Если я добавлю Yahoo CSS Reset в файл ProblemPage.css, он определенно будет подхвачен обоими браузерами во всех четырех случаях, но проблема останется: когда IE печатает страницу из IFrame, размеры шрифта облажаются. *

ОБНОВЛЕНИЕ 2

Никогда не нашел проблему. В более простом тестовом проекте не было той же проблемы, и я подозреваю, что это может быть проблема с мастер-страницами, темами или чем-то в этом роде. Интересно, что проблема не возникла на IE6, просто IE7.

Я решил разобраться с проблемой с помощью условно прокомментированного CSS только для IE7. Это была единственная часть всего приложения, где мне приходилось использовать условный CSS.

Все еще хотел бы получить ответ (или даже несколько WAGs о том, что искать дальше).

Ответы [ 5 ]

1 голос
/ 08 апреля 2009

Когда вы описали «меньший размер шрифта», это заставило меня задуматься о случаях, когда в моем CSS имелась особенность «font-size: 0.8em». Под стэком я подразумеваю, что текст, который отображался слишком маленьким, находился внутри родительского элемента, на котором был размер шрифта EM, и он сам был.

Я бы не ожидал, что это произойдет с iframe, но я подумал, что на всякий случай добавлю это.

1 голос
/ 08 апреля 2009

Звучит странно. Сложно диагностировать без теста онлайн, но:

  • происходит ли то же самое, если вы используете window.print () из JavaScript на родительской странице?

  • если нет, как насчет того, чтобы дочерний фрейм вызывал функцию или устанавливал переменную в скрипте родительского фрейма, который затем (при возврате элементов управления на родительскую страницу через тайм-аут или опрос) вызывает print () в собственном окне?

1 голос
/ 08 апреля 2009

Убедитесь, что на странице, которую вы пытаетесь распечатать, указана правильная таблица стилей. Если нет, некоторые браузеры могут использовать родительский элемент, а другие - нет.

0 голосов
/ 11 января 2012

Вы можете попробовать это:

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();
    }
}
0 голосов
/ 01 октября 2010

Добрый день! Если проблема не устранена, попробуйте эту статью. Это сработало хорошо для меня.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...