Javascript打印功能如何工作?我可以使用javascript创建文档并将其打印出来吗?

时间:2009-08-07 21:11:16

标签: javascript html dom printing

我知道你可以使用window.print()打印当前页面......但是我想知道的是我可以使用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();

我并不真正关心添加多少颜色 - 只想格式化文档,用数据填充它并打印出来。这可能吗?

8 个答案:

答案 0 :(得分:5)

Print()是窗口对象上的一个方法。如果您使用javascript在窗口中创建文档,然后在该窗口对象上调用print,它应该可以工作。

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

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

答案 1 :(得分:2)

我的第一个念头:

您可以通过编程方式创建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

答案 2 :(得分:1)

print()基本上只调用给定窗口的本机打印对话框。

但正如你所想的那样,它可以在任何窗口或(i)框架上工作。

因此,如果您将内容写入帧,则可以调用它来打印它。

window.frameName.print();

注意唯一的缺点(也是一个很大的缺点),就是这会调出打印对话框...而不是打印预览窗口......因此用户真的没有机会看到他们正在打印什么和/或缩放它以适合他们的打印机/纸张。

我个人希望所有浏览器都能实现以下功能来处理上述问题。 ; - )

window.printPreview();

答案 3 :(得分:1)

为什么不让media = print不可见,然后用特殊代码只显示一些块?

答案 4 :(得分:0)

如果您在加载文档时这样做,可以使用document.write编写当前文档,然后打印。

如果页面已完成加载,您可以使用函数来操作DOM,或者最好使用jQueryPrototype等库,然后打印当前文档。

答案 5 :(得分:0)

杰克,您在加载文档后是否在iframe中尝试了window.print()?

答案 6 :(得分:0)

有一个简单的解决方案,无需编写函数,即 - window.print()

如果您想使用它,只需将 - onClick =“window.print();”

示例

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

我在每个浏览器上测试它,它就像一个魅力!

答案 7 :(得分:0)

有三种方法可以打印其中两种方法。

  1. 打印整个窗口:window.print();将起作用。

  2. 仅打印特定框架:window.parent._frame_id_.print();将起作用。

  3. 打印documentFragment无效(至少在Firefox中): document.createDocumentFragment().print();//undefined