打开一个包含ASPX回发结果的弹出窗口

当我点击“导出为PDF”按钮时,我有一个ASPX页面,其中包含许多生成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', '__foo', 'width=700,height=500,status=yes,resizable=yes,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();
    }
}

用IFrame打开pdf窗口,你可以这样做:

父框架内容

<script>
window.onload=function() {
  window.frames["pdf"].focus();
  window.frames["pdf"].print();
}
</script>
<iframe name="pdf" src="url/to/pdf/generation"></iframe>

受此启发https://stackoverflow.com/a/9616706


在你的问题标签中你有asp.net标签,所以我想你可以访问某种ASP.NET服务器技术。

我会建议这样做:

  • 创建一个HttpHandler或一个返回FileContentResult的ASP.NET MVC操作
  • 在您的页面中,使用此代码下载并打印文件(实际在此处找到它,粘贴它以供将来参考!)

    <a href="/path/to/file.pdf" onClick="window.print();return false">点击此处下载可打印版本</a>

  • 在编写服务器端有一些很好的教程:

  • 演练:创建一个同步HTTP处理程序
  • 如何从数据库中获取特定图像?
  • 而我自己的:从Web位置下载PDF文件并在Web应用程序ASP C#中的客户端上提示用户SaveAs框
  • 链接地址: http://www.djcxy.com/p/77477.html

    上一篇: Open a popup containing ASPX postback result

    下一篇: R segments can't handle transparency?