将div和他的风格复制到新窗口
我正在尝试将一个div复制到一个新的窗口进行打印,这样工作正常,但他复制的div没有附加任何风格。
$('#PrintNews').bind('click', function () { var printContents = new $("#divToPrint").clone(); var myWindow = window.open("", "popup", "width=1000,height=600,scrollbars=yes,resizable=yes," + "toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0"); var doc = myWindow.document; doc.open(); $(printContents).find("#PrintNews").remove(); doc.write($(printContents).html()); doc.document.close(); doc.focus(); doc.print(); doc.close(); }); });
我如何在一个新窗口中打开这个div进行打印,但是他的所有样式都像原来的div一样?
你应该构建这样的新窗口的html,以链接extarnal css文件。
doc.write(""); doc.write(""); doc.write(""); doc.write(""); // your css file comes here. doc.write(""); doc.write(""); doc.write($(printContents).html()); doc.write(""); doc.write("");
这是因为在打印之前没有加载样式。
var showPrintWindow = function (context) { var printWindow = window.open('', ''); var doc = printWindow.document; doc.write(""); doc.write(""); doc.write(""); doc.write(context); doc.write(""); doc.close(); function show() { if (doc.readyState === "complete") { printWindow.focus(); printWindow.print(); printWindow.close(); } else { setTimeout(show, 100); } }; show(); };
这取决于div的样式。 如果基于ID或类应用样式,那么您可以在新窗口中包含相同的样式表。 但是,如果任何样式都基于元素的祖先,那么它就变得棘手,因为你必须复制祖先元素才能应用精确的样式。
听起来你应该使用特定于打印的样式。 只能通过在样式表链接上包含media="print"
属性来应用样式表进行打印。 然后,此样式表负责隐藏页面中您不想打印的任何元素,并定位您执行的那些元素。 这样您就不会受弹出窗口阻止程序的影响,并且可以减少用户打印文档的步骤。
您可以通过在原始样式表中使用媒体查询来实现相同的目的。 这是一个非常简单的例子:
@media print { .print {width:100%;} .noPrint {display:none;} }
要测试它,只需删除@media包装器,看看它在浏览器中的外观。 它应该让您非常了解页面在纸上的外观。
将外部css包含在复制DIV的窗口中。 否则只会复制内联样式。