在ASP.NET中打印的最佳方式

时间:2008-11-04 15:23:20

标签: asp.net printing

在使用XSLT转换为我想要的模板后,我在内存中保存了一个html字符串。将此发送到客户端打印机的最佳机制是什么?

在以前的项目中,我无耻地作弊并创建了一个打印预览屏幕,它实际上是一个带有白色背景的ASPX页面,然后我使用Window.print()打印。

干杯

2 个答案:

答案 0 :(得分:4)

我认为“打印预览”根本不是作弊。由于您的字符串很可能在服务器上(即在ASP.NET代码隐藏中创建),因此必须以某种方式将其输出到客户端并调用window.print()进行打印。网络服务器无法访问客户端的打印机。但是,您可以使用一些提示来简化操作:

- 在CSS中使用@media标签为页面提供可打印的样式。在许多情况下,您可以使用它来隐藏任何导航等,而不需要“打印预览”。我通常会在我的.css文件中添加如下内容:

.showwhenprinting {position:absolute; display:none;}
@media print
{
  .hidewhenprinting {position:absolute; display:none;}
  .showwhenprinting {position:relative; display:block;}
}

这将允许您在大多数浏览器中打印时隐藏块。例如:

<div class="someclass hidewhenprinting">Navigation Menu</div>
<div class="someclass showwhenprinting">Printed Page Title</div>

这种方法的另一个好处是它允许用户只需像浏览器中那样点击“打印”。缺点是一些旧的浏览器不支持它,并且在某些情况下它不能给你足够的控制布局(例如,如果你想要页面页眉/页脚)。

- 如果上面没有提供您需要的输出(例如,您不希望打印结果中的页面URL等),另一个选项是使用打印机友好的格式,如作为PDF。为此,请使用Reporting Services或类似工具生成PDF。

- 我不建议的最后一个选项是在页面中添加隐藏的iframe,用“可打印”HTML填充它,然后在其中调用print()。这可能有用,但需要一些javascript才能完成,所以你需要注意使它跨浏览器。这将与选项#1具有相同的缺点,但更难以正确使用。

答案 1 :(得分:1)

查看CSS媒体选择器。您可以使用它们在屏幕上创建单个页面,并在用户在浏览器中选择打印时打印出来。