在使用XSLT轉換爲我所需的模板後,我在內存中保留了一個html字符串。將此發送給客戶端打印機的最佳機制是什麼?在ASP.NET中打印的最佳方式
在之前的項目中,我無恥地作弊並創建了一個打印預覽屏幕,該屏幕實質上是一個白色背景的ASPX頁面,然後我使用Window.print()
打印。
Cheers
在使用XSLT轉換爲我所需的模板後,我在內存中保留了一個html字符串。將此發送給客戶端打印機的最佳機制是什麼?在ASP.NET中打印的最佳方式
在之前的項目中,我無恥地作弊並創建了一個打印預覽屏幕,該屏幕實質上是一個白色背景的ASPX頁面,然後我使用Window.print()
打印。
Cheers
我不認爲'打印預覽'是作弊的。由於您的字符串很可能在服務器上(即在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相同的缺點,但難以正確地進行。
看看CSS媒體選擇器。您可以使用它們在屏幕上創建單個頁面,並在用戶選擇在瀏覽器中進行打印時打印效果也很好。
我將我的類命名爲「PrintOnly」和「ScreenOnly」(如果我在考慮移動設備,也可以選擇「PrintNever」)。 「showwhenprinting」就是這樣一口。 – 2008-11-04 15:56:55