我有一个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();
- }
- }