2008-11-04 88 views
2

在使用XSLT转换为我所需的模板后,我在内存中保留了一个html字符串。将此发送给客户端打印机的最佳机制是什么?在ASP.NET中打印的最佳方式

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

Cheers

回答

4

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

-use在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相同的缺点,但难以正确地进行。

+0

我将我的类命名为“PrintOnly”和“ScreenOnly”(如果我在考虑移动设备,也可以选择“PrintNever”)。 “showwhenprinting”就是这样一口。 – 2008-11-04 15:56:55

1

看看CSS媒体选择器。您可以使用它们在屏幕上创建单个页面,并在用户选择在浏览器中进行打印时打印效果也很好。