我有一个ASPX页面,其中包含许多字段,当我单击“导出到PDF”按钮时,它会生成PDF文档.
我现在想在JavaScript中使用“打印PDF”按钮,它可以执行以下操作:
w = window.open(?); w.print(); w.close();
哪里“?”将执行与“导出到PDF”按钮相同的回发.
解决方法
如果您需要将表单提交(回发)到新窗口,您可以尝试将表单目标更改为假,例如:
var form = $("form"); form.attr("target","__foo");
提交表格.
form.submit();
并删除目标(setitmeout(,1) – 在js“event-queue”结尾处的事件,在我们的例子中 – 在表单提交后):
setTimeout(function () { form.removeAttr("target"); },1);
此外,在提交之前,您可以尝试打开带有__foo id的窗口以获得更多样式,并且表单将在此窗口中提交(回发)而不是新窗口:
var wnd = window.open('','__foo','width=450,height=300,status=yes,resizable=yes,scrollbars=yes');
但我不知道如何处理提交的窗口并捕获onload或jquery的ready事件.如果你能分享解决方法,请拨打wnd.print();你可以在这个wnd中使用iframe,也许你会找到一个解决方案.
更新:
试着看看这个原型[在Chrome中测试]:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.0.min.js"></script> <script type="text/javascript"> function PrintResult() { var wnd,checker,debug; debug = true; // create popup window wnd = window.open('about:blank','width=700,height=500,scrollbars=yes'); // create "watermark" __loading. wnd.document.write("<h1 id='__loading'>Loading...</h1>"); // submit form to popup window $("form").attr("target","__foo"); setTimeout(function() { $("form").removeAttr("target"); },1); if (debug) { $("#log").remove(); $("body").append($("<div id='log'/>")); } // check for watermark checker = setInterval(function () { if (debug) $("#log").append('. '); try { if (wnd.closed) { clearInterval(checker); return; } // if watermark is gone if (wnd.document == undefined || wnd.document.getElementById("__loading") == undefined) { if (debug) $("#log").append(' printing.'); //stop checker clearInterval(checker); // print the document setTimeout(function() { wnd.print(); wnd.close(); },100); } } catch (e) { // ooops... clearInterval(checker); if (debug) $("#log").append(e); } },10); } </script> </head> <body> <form id="form1" runat="server"> <div> <asp:Button runat="server" ID="ReportButton" OnClick="ReportRenderClick" Text="Export to PDF" OnClientClick="PrintResult()"/> <asp:Button runat="server" Text="Just a button."/> </div> </form> </body> </html>
这是.cs文件:
public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender,EventArgs e) { } protected void ReportRenderClick(object sender,EventArgs e) { Response.Clear(); Thread.Sleep(2000); Response.ContentType = "application/pdf"; Response.WriteFile("d:\\1.pdf"); //Response.ContentType = "image/jpeg"; //Response.WriteFile("d:\\1.jpg"); //Response.Write("Hello!"); Response.End(); } }