繁体   English   中英

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

[英]How does the Javascript print function work? Can I create a document using javascript and print it off?

我知道你可以使用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();

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

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窗口打开示例修改的示例。

我的第一个想法:

您可以以编程方式创建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>');

您可以在此处测试上述代码段。

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

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

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

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

window.frameName.print();

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

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

window.printPreview();

如果在加载文档时执行此操作,则可以使用document.write写入当前文档,然后进行打印。

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

杰克,你在加载文件后在iframe中尝试过window.print()吗?

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

无论你想使用它只是把 - onClick =“window.print();”

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

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

打印有两种方法可以使用。

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

  2. 仅打印特定帧: window.parent._frame_id_.print(); 将工作。

  3. 打印documentFragment不起作用(至少在Firefox中): document.createDocumentFragment().print();//undefined

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM