2013-12-03 2 views
6

Мое приложение генерирует печатные отчеты, создавая невидимый iframe, а затем печатает его. Мой последний в удручающе длинном списке проблем, которые я пытаюсь решить, - это оптимизация CSS для разных печатных размеров страниц. IE9 кажется, чтобы немного поработать (но имеет и другие проблемы, такие как игнорирование @page {margin: ...}), но не удача вообще в FF или Chrome.Обнаружение печатного размера страницы с помощью запросов в формате CSS

Мой код выглядит следующим образом:

@media print and (width: 210mm) and (height: 297mm) { 
    ... stuff for A4 size ... 
} 

@media print and (width: 8.5in) and (height: 11in) { 
    ... stuff for US letter size ... 
} 

Ни одно из этих правил подкрепляются, когда-либо, в Chrome или FF. Я также пробовал ширину устройства и высоту устройства, и они тоже не работали (они, казалось, сообщали об абсолютных максимальных размерах принтера, а не о размере страницы). Я не могу понять, какое значение «ширина» и «высота» возвращаются, есть ли способ рассказать?

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

+0

Интересно, есть ли проблемы с точной шириной/высотой. Вы пытались изменить его на что-то вроде 'max-width' или' min-height'? – redbmk

+0

Просто попробовал, не пошел. Рассмотрим: ' <тип стиль = "текст/CSS"> @media (мин-ширина: 8in) { тело {начертание шрифта: жирный; } } @media (min-width: 10.5in) { body {font-style: italic; } } здесь некий текст тела ' Здесь CSS срабатывает, как изменить размер окна, но когда я иду не печатать ничего триггерами больше (проверено в Chrome). – neilw

ответ

-2

Вы, кажется, делает много работы что-то вам не нужно делать много работы ... Попробуйте напечатать определенные области страницы, как это ...

Добавить эти классы в таблице стилей ...

<style media="screen"> 
    .noPrint{ display: block; } 
    .yesPrint{ display: block !important; } 
</style> 

<style media="print"> 
    .noPrint{ display: none; } 
    .yesPrint{ display: block !important; } 
</style> 

А затем положить классы, где они нужны. Точно так же, как совет ... только размещение класса .yesPrint не будет печатать области, которые вам нужны. Вам также нужно будет положить .noPrint в те области, которые вы не хотите печатать.

Я тестировал это на Chrome, IE10, IE9 и IE8, и он отлично работает.

+3

Моя проблема не позволяет отображать или скрывать элементы для печати. Моя проблема связана с конкретным CSS для * разных печатных размеров страниц *, что принесло бы мне пользу по целому ряду загадочных причин. Мой iframe используется только для печати, поэтому мне даже не нужно обнаруживать «печать» через мультимедийный запрос, хотя я включил его в свой вопрос только для ясности. – neilw

+0

Итак, если я правильно вас понимаю ... если вы печатаете лист размером от 8 1/2 "на 11", он должен печатать определенный CSS, а если вы печатаете 4 "на 6", тогда другой CSS должен печатать? Или вы пытаетесь изменить размер печатных данных на основе формата бумаги, который вы печатаете? – webfrogs

+0

Это первый. Конкретный CSS для разных размеров страниц. Мне нужно только установить несколько свойств там, но они имеют большое значение. – neilw

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