2010-07-27 94 views
6

我有一个页面,用户将可以从中打印。但是,打印的页面不是用户正在查看的页面,而是我想在背景上生成的新页面,并且可能仅显示打印对话框。打印页面而不显示它?

只是为了把事情说清楚:

  1. 用户是在 “View.aspx”,并点击我的打印按钮(不是浏览器的一个)。
  2. 打印按钮载入“Printable.aspx”的内容和显示的打印对话框,使其在用户仍对“View.aspx”。

仅供参考,我想要避免是有“Printable.aspx”打开一个新的窗口,然后显示其打印对话框。

在此先感谢。

回答

12

在CSS中使用MEDIA标签的组合来显示/隐藏要打印的对象。

<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”,因此您只能在打印时看到它们。您只需要为“@media screen”定义一次css类,然后再为“@media print”定义一次,以确保它们的行为不同。

您还可以将整个样式表用于打印。

<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 2010-07-27 16:25:17

+0

我很喜欢这个工作的例子。我有几个控件和容器,我不想打印,但完全不知道如何有效地这样做。谢谢。 – rebelliard 2010-07-27 16:33:07

+1

@Rafael:我将示例更新为非DIV特定。 – 2010-07-27 16:45:57

0

我不认为你想要什么是可能的。但我可能是错的。尽管更好的方法是使用不同的CSS样式表。

0

您可以将页面加载到隐藏的iframe元素中,然后使用javascript执行该页面的打印功能。

但是,像@carter建议的那样,CSS是更好的方法。为什么只要重新放置当前内容,为什么要重复加载重复内容?

+0

如果要显示的数据未加载到当前页面上,并且可打印版本包含所有详细信息,该怎么办:最好是通过类似ajax的方式加载剩余的内容,或者只是将内容加载到隐藏的面板上? – rebelliard 2010-07-27 16:55:21

1

当点击打印按钮,将Printable.aspx添加到隐藏面板view.aspx。 通过将javascript添加到视图的onload事件来响应。aspx &用打印隐藏面板window.print()

相关问题