我知道你可以使用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();
我并不真正关心添加多少颜色 - 只想格式化文档,用数据填充它并打印出来。这可能吗?
答案 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
编写当前文档,然后打印。
答案 5 :(得分:0)
杰克,您在加载文档后是否在iframe中尝试了window.print()?
答案 6 :(得分:0)
有一个简单的解决方案,无需编写函数,即 - window.print()
如果您想使用它,只需将 - onClick =“window.print();”
示例
<a href="" onClick="window.print();">Print</a>
我在每个浏览器上测试它,它就像一个魅力!
答案 7 :(得分:0)
有三种方法可以打印其中两种方法。
打印整个窗口:window.print();
将起作用。
仅打印特定框架:window.parent._frame_id_.print();
将起作用。
打印documentFragment
无效(至少在Firefox中):
document.createDocumentFragment().print();//undefined