2012-11-27 79 views
-1

我有一個包含的頁面,讓我們說3個div我想打印seperatly - 我可以做到這一點手動。但是,webapp使用無聲打印來運行Chrome,我需要在3個獨立的打印作業中打印這3個div。打印樣式表是不是我所需要的 - 3獨立打印作業是需要的...觸發window.print()兩次或更多次

所以我需要多次觸發window.print()。我想出了最好的和唯一的解決辦法是觸發我的打印功能的3倍,像這樣:

setTimeout(function() { printContent('print1', 'letter'); }, 0); 

setTimeout(function() { printContent('print2', 'letter'); }, 1); 

setTimeout(function() { printContent('print3', 'letter'); }, 2); 

然而,somethimes Chrome瀏覽器無法運行該功能的三倍。我怎樣才能確定,函數是連續觸發3次?

如果有人覺得有趣,我printContent()函數是這樣的:

function printContent(divContent, divClass) { 
    var divContent = $('#' + divContent).html(); 
    $('#print-spooler-box').html('').addClass(divClass).html(divContent); 
    window.print(); 
    $('#print-spooler-box').removeClass(divClass); 
} 
+0

我以前從來沒有這樣做的話這個任務,但你可以嘗試使用較長的延遲。每次打印電話之間100-250毫秒。在下一個被調用之前,它可能會給打印子系統足夠的時間來處理一個打印子系統。 – jwatts1980

回答

2

可避免打印多次,編輯您的打印CSS。

可以使用媒體查詢或media屬性(在<link>元素中)來定位打印樣式。

<div class="new-page"> 
    <p>page one</p> 
</div> 
<div class="new-page"> 
    <p>page two</p> 
</div> 

,然後在你的CSS:

.new-page{ 
    page-break-before: always; 
} 
+0

是的,我知道 - 但無論如何,在我的情況下,我需要單獨的打印作業。這是因爲我希望允許用戶僅打印頁面的特定部分,而不強制用戶打印打印樣式表中可見的所有元素。其次,也是最重要的一點,有時使用的打印機是熱敏打印機 - 熱敏打印機上的切紙器僅在打印作業分離時才被激活。 這就是爲什麼我寫了「我需要打印這3個div,在3個獨立的打印作業。」 :) – EibergDK

+0

然後你需要3個獨立的打印按鈕,顯示/隱藏相關元素。用戶*有*能夠選擇打印對話框中打印哪個頁面,您知道... – ahren

+0

不想使用顯示/隱藏 - 是的,我需要不同的打印按鈕,但並不需要顯示/隱藏相關元素...我將加載所需的內容到我的div進行打印。它比編寫打印樣式表來顯示/隱藏元素或使用jQuery顯示/隱藏相關元素要靈活得多。就像我說的,我需要單獨的打印作業來激活熱敏打印機上的切紙器。樣式表無法實現。 – EibergDK