2009-08-07 64 views
6

我知道你可以使用window.print()來打印當前頁面......但是我想知道的是,我可以使用javascript構建一個文檔來填充數據並將其打印出來?Javascript打印功能如何工作?我可以使用JavaScript創建文檔並將其打印出來嗎?

就像你可以有HTML/XML作爲一個JavaScript對象,你可以做同樣的事情到這一點:

var name = "Matt"; 
var htmlDocumentToPrint = "<html><body><div style='width:300px; height:20px; background-color:#000; text-align:center;'>My name is " + name + "</div></body></html>"; 

htmlDocumentToPrint.print(); 

我真的不關心添加顏色所有much--只是想格式化一個文檔,填充數據,然後打印出來。這可能嗎?

回答

4

Print()是窗口對象的方法。如果您使用JavaScript在窗口中創建文檔,然後調用該窗口對象上的打印,它應該可以工作。

<script type="text/javascript"> 
    var myWindow = window.open('','','width=200,height=100') 
    myWindow.document.write("This is 'myWindow'") 
    myWindow.print(); 
</script> 

修改自w3schools.com窗口的示例打開示例。

+1

你也可以使用一個隱藏的iframe來打印隱藏文件! – James 2009-08-07 22:24:03

+0

這似乎不適用於Chrome或Opera。當隱藏的iFrame上調用self.print()或window.print()時,兩個瀏覽器似乎都會打印父窗口。 – Jack 2009-11-05 23:39:04

+0

事實上,它似乎沒有與高度和寬度爲0px的iframe一起工作... – Jack 2009-11-05 23:41:53

0

如果您在文檔加載時正在執行此操作,則可以使用document.write來編寫當前文檔,然後將其打印。

如果頁面已完成加載,可以使用函數來操作DOM,或者最好使用庫如jQueryPrototype,然後打印當前文檔。

1

print()基本上只是調用給定窗口的本機打印對話框。

但是,當你在想,它可以在任何窗口或(i)框架上工作。

因此,如果您將內容寫入一個框架,您可以調用它來打印它。

window.frameName.print(); 

注意唯一的缺點(和它的一個大的),是這個調出打印對話框......不打印預覽窗口......因此用戶並沒有真正得到一個機會,看看他們正在打印和/或縮放以適應他們的打印機/紙張。

我個人希望所有瀏覽器都能實現以下功能來處理上述問題。 ;-)

window.printPreview(); 
1

我首先想到的:

要打印

您可以以編程方式創建一個iframe,分配HTML,呼籲iframe.contentWindow的背景下print()功能,然後從DOM中刪除的iframe:

function printHTML(input){ 
    var iframe = document.createElement("iframe"); // create the element 
    document.body.appendChild(iframe); // insert the element to the DOM 

    iframe.contentWindow.document.write(input); // write the HTML to be printed 
    iframe.contentWindow.print(); // print it 
    document.body.removeChild(iframe); // remove the iframe from the DOM 
} 

printHTML('<h1>Test!</h1>'); 

你可以測試上面的代碼片段here

+0

在IE中不起作用。如果我沒有記錯,你需要在打印之前將窗口聚焦(),或者類似的東西。 – James 2009-08-07 22:25:40

+0

這使Google Chrome崩潰 – 2009-08-11 13:08:06

1

爲什麼不只是讓media = print的所有東西都看不見,然後用你的特殊代碼只顯示一些塊?

0

傑克,加載文檔後,你是否嘗試過iframe中的window.print()?

0

有一個簡單的解決方案可用,無需編寫一個功能,那就是 - 窗口。打印()

無論你想使用它只是把 - onClick =「window.print();」

<a href="" onClick="window.print();">Print</a> 

我睾丸它的每一個瀏覽器,它就像一個魅力!

0

有三種方法可以打印其中兩種方法。

  1. 打印整個窗口:window.print();將工作。

  2. 只打印一個特定的框架:window.parent._frame_id_.print();將工作。

  3. 打印一個documentFragment不會(至少在Firefox)工作: document.createDocumentFragment().print();//undefined