2009-04-07 1 views
4

У меня простая табличная HTML-страница с очень простой таблицей стилей. Я могу открыть страницу в IE7 и FireFox 3, и это выглядит точно так же. Я могу распечатать страницу из обоих браузеров, и она выглядит точно так же. Мы будем называть страницу «ProblemPage.htm»Почему я вижу разные размеры шрифта при печати страницы с IFrame?

Теперь внутри страницы 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

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

UPDATE 2

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

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

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

ответ

1

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

+0

Это точно такой же HTML-файл в том же проекте. В одном случае я просматриваю его напрямую. В другом я загружаю его в IFrame на другой странице и печатаю его со сценарием выше. Он видит CSS, потому что изменения действительно появляются. Это просто очень непоследовательно. – CMPalmer

1

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

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

+0

Моя единственная настройка размера шрифта - это тело. Этот CSS действительно предназначен только для печати, поэтому я использую точки. body {font-size: 11pt; } Не следует ли сбросить CSS или помещать размер шрифта: на 100.01% выше этого отменяется любая внешняя укладка? Не говоря уже об абсолютном размере. – CMPalmer

+0

Хм, ну, это стоило того! Как вы сказали, шрифт 11pt не должен масштабироваться при укладке. Любопытно. – Matt

1

Звучит странно.Трудно диагностировать без испытания в Интернете, но:

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

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

+0

Я попробую. Я собираюсь начать с чрезвычайно минимального проекта, чтобы уменьшить любые другие переменные. Если этот проект покажет проблему, я отправлю весь код. Если это не так, это все равно поможет мне с нуля в моей проблеме ... – CMPalmer

+0

Пока что минимальный проект работает нормально. Это сужает его до меньшего (но все же большого) набора возможностей: мастер-страниц? стили по умолчанию? Что-то другое? – CMPalmer

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

 Смежные вопросы

  • Нет связанных вопросов^_^