2

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

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

干杯

4

2 回答 2

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 相同的缺点,但更难正确处理。

于 2008-11-04T15:50:40.040 回答
1

查看 CSS 媒体选择器。您可以使用它们在屏幕上创建您想要的外观,并且当用户在浏览器中选择打印时也可以很好地打印。

于 2008-11-04T15:28:02.423 回答