2010-03-07 96 views
5

我希望能夠爲我的用戶提供一個按鈕來打印我的dojo/dijit應用程序的特定部分。當涉及到打印時,似乎普遍缺乏文檔和示例。dojo/dijit和Printing

例如,我有一個特定的dijit.layout.ContentPane,其中包含我想要打印的內容,但我不想打印文檔的其餘部分。我在網上看到了一些純粹的JavaScript示例,其中node.innerHTML被讀入「隱藏的」iframe,然後從那裏打印。我懷疑這會起作用,但我想知道是否有更多的dojo中心打印方法。

有什麼想法?

回答

1

我決定走下來的讀入和打印從那裏的道路,但因爲我使用的是呈現的dojox.gfx表面,所以直接從目標ContentPane讀取到不可見的iframe在某些瀏覽器中無法正常工作。因此,我所做的是將iframe的「src」設置爲重新呈現圖的頁面,然後在完成時將其自行打印出來。在主文檔,它看起來是這樣的:

<iframe id="printIFrame4" src="#" style="width: 0px; height:0px; 
    border: none; background: transparent"></iframe> 
<button dojoType="dijit.form.Button" style="margin-top: -3px;" id="buttonPrintMap4"> 
    Print... 
    <script type="dojo/method" event="onClick" args="event"> 
    dojo.byId("printIFrame4").src = "logmap/docMap.php?id=4"; 
    </script> 
</button> 

然後在頁面做必要的道場東西重劃圖,然後一旦加載它做了:

this.focus(); 
this.print(); 

然後如下通過打印。

+0

剛剛碰到過這個。我認爲框架不再流行。只是警告任何其他人誰發現這一點。 – ZMorek

0

一個解決辦法是,而第一條規則在默認情況下隱藏的一切創造一個只打印樣式表:

body { 
    display: none; 
} 

然後,第二CSS規則,也是你唯一的打印樣式表,只顯示道場內容窗格:

#contentPaneId { 
    display: block; 
} 

道場ContentPane ID必須與你在CSS使用什麼#contentPaneId

最後,你可以在你的link標籤指示瀏覽器,它是使用media="print"的打印僅CSS文件:

<link rel="stylesheet" type="text/css" href="printOnly.css" media="print"/> 
+1

我應該補充一點,CSS規則「display:none」會強制佈局填充項目過去的位置。 「可見性:隱藏」規則會將項目的尺寸留在佈局中,但會隱藏該項目。 – Abboq

+2

我們正在討論一個可以輕鬆擁有100個不同類的應用程序,我不直接控制它,因爲我正在使用一個框架。雖然理想,但它並不實用,也不是非常適合dojo中心。 – Kitson

+0

我編輯了我的原始答案,以提供一種使用ID而不是類的方法,應該比改變所有這些類的工作少。 – Abboq