2010-07-27 117 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()