2010-07-27 4 views
6

У меня есть страница, с которой пользователь сможет печать. Тем не менее, страница, которая будет напечатана, не является тем, который пользователь просматривает, а скорее новой, которую я хотел бы сгенерировать на фоне, и (возможно) показать только диалог печати.Печать страницы без ее отображения?

Просто, чтобы сделать вещи ясно:

  1. Пользователя на "View.aspx" и нажимает мою кнопки Печати (не браузер один).
  2. В печати кнопка загружает содержание «Printable.aspx» и отображает диалоговое окно печати для него в то время как пользователь все еще находится на «View.aspx».

FYI, что я пытаюсь избежать, чтобы иметь «Printable.aspx» откроется в новом окне, а затем показать его диалоговое окно печати.

Заранее спасибо.

ответ

12

Используйте сочетание тегов MEDIA в CSS, чтобы отображать/скрыть объекты для печати.

<STYLE type="text/css"> 
@media print { 
    .PrintOnly {font-size: 10pt; line-height: 120%; background: white;} 
} 
@media screen { 
    .PrintOnly {display: none} 
} 
</STYLE> 

Вы можете сделать элементы управления, стиль Display:none на экране СМИ, так что пользователь видит их только при печати.

<DIV class="PrintOnly"> 
This control will only show up during printing 
</DIV> 

Любое из ваших элементов управления можно классифицировать как «PrintOnly», чтобы вы видели их только при печати. Вам просто нужно, чтобы класс css был определен один раз для «экрана @media» и один раз для «печати @media», чтобы убедиться, что они ведут себя по-другому.

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

<LINK rel="stylesheet" type"text/css" href="screen.css" media="screen"> 
<LINK rel="stylesheet" type"text/css" href="print.css" media="print"> 
+1

+1: Таким образом, вы даже не нужен второй страницы, просто второй таблицы стилей. Одна и та же страница будет отображаться по-разному через принтер. – David

+0

Мне бы очень понравился рабочий пример. У меня есть несколько элементов управления и контейнеров, которые я бы не хотел печатать, но понятия не имею, как эффективно это делать. Благодарю. – rebelliard

+1

@ Rafael: Я обновил пример, чтобы быть не-DIV конкретным. –

0

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

0

Вы можете загрузить страницу в скрытый элемент IFrame, а затем использовать javascript для выполнения функции печати этой страницы.

Но, как предложил @carter, CSS - лучший подход. Зачем загружать дублированный контент более одного раза, когда вы можете просто обновить текущий контент?

+0

Что делать, если отображаемые данные не загружаются на текущую страницу, а версия для печати содержит все ее детали: было бы лучше загрузить оставшийся контент через что-то вроде ajax или просто загрузить содержимое на скрытую панель? – rebelliard

1

Когда печати кнопка нажата , добавьте Printable.aspx в скрытую панель view.aspx. Ответьте, добавив javascript в событие onload .ASPX & печати скрытая панель с window.print()