1

我正在使用 ASP.NET 和 C#。我正在生成pdf并使用页面加载发送它

response.TransmitFile(file);

所以在此之后我需要关闭这个窗口。我尝试编写用于关闭的动态脚本,但这不起作用。

单击按钮时,我正在使用此代码打开窗口。

window.open("Export.aspx?JobNumbers=" + jobnums,'',"resizable=0,scrollbars=0,status=0,height=200,width=500");

在 export.cs 的页面加载上,我正在使用 itextsharp 创建 pdf。然后使用 this 来创建 pdf。它在使用动态单击的按钮的 buttonclick 上调用

            string script = "var btn = document.getElementById('" + Button1.ClientID + "');";
            script += "btn.click();";
            Page.ClientScript.RegisterStartupScript(this.GetType(), "Eport", script, true);

这是按钮的onclick事件。

           protected void StartExport(object sender, EventArgs e)
           {
            response.Clear();
            response.ContentType = "application/pdf";
            response.AddHeader("content-disposition", "attachment;filename=" + Path.GetFileName(strFilePath));
            response.TransmitFile(strFilePath);
            response.Flush();  
           }

在此之后,我需要关闭这个 export.aspx 窗口,因为我使用了这个。

Page.ClientScript.RegisterStartupScript(this.GetType(), "Export", "window.onfocus=function(){window.close();}", true);

HttpContext.Current.Response.Write("<script>window.onfocus=function(){window.close();}</script>");

但没有奏效。

是否可以?

4

4 回答 4

1

你应该尝试这样的事情:

<script>
    $.get('/call/the/page.aspx'); // Send a request to the page from which you Transmit the file

    window.setTimeOut(function() { window.close(); }, 5000);
</script>

这将在 5 秒后尝试关闭窗口,留出足够的时间让下载开始。

你必须把它放在一个页面中,在一个弹出窗口中打开那个页面,这样这个脚本就会执行,请求文件,然后关闭它自己。

于 2012-12-13T06:26:19.040 回答
1

在正文标签 html 上,您必须设置 event unload="window.close()" 。这对我有用

于 2015-02-11T13:05:14.963 回答
0

我建议写一个HttpHandler:

/// <summary>
/// here is your server-side file generator
/// </summary>
public class export : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        // get some id from query string
        string someid = context.Request.QueryString["id"];

        try
        {
            ...

            context.Response.ContentType = "application/pdf";
            context.Response.HeaderEncoding = System.Text.Encoding.UTF8;
            context.Response.ContentEncoding = System.Text.Encoding.UTF8;
            context.Response.AppendHeader("Content-Disposition", "attachment; filename=filename.pdf");

            context.Response.Write(yourPDF); 
            /* or context.Response.WriteFile(...); */

        }
        catch (Exception ex)
        {
            /* exception handling */
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

不要忘记在 Web.config 中注册它:

<system.webServer>
    <handlers>
        <add name="/export_GET" path="/export" verb="GET" type="YourNamespace.export" preCondition="integratedMode,runtimeVersionv4.0" resourceType="Unspecified" />
    </handlers>
</system.webServer>

之后,您只需从 javascript 调用此处理程序,如下所示:

ExportFile: function () {

    ...

    var url = "http://" + window.location.hostname + ":4433/export?cid=" + id;

    window.open(url);
}

它会向您显示保存对话框,而无需手动关闭新窗口(它将自动关闭)。

于 2013-06-10T07:01:09.347 回答
-1

由于很明显您无法关闭浏览器因下载文件而创建的窗口(例如下载文件列表/您是否要打开提示),所以我认为问题是“如何关闭已初始化的托管页面”获取 PDF”操作。

由于页面无法知道下载文件的完成情况,如果下载完成,您可能需要询问服务器(即 AJAX erquest) - 它需要一些服务器端代码来跟踪下载(并且您可能无法使用会话状态来存储下载状态,因为它将被其他请求锁定)。当您确认下载完成后,您可以关闭窗口。请注意,用户打开的关闭窗口要么失败,要么至少显示确认“你真的要关闭吗”......

于 2012-12-13T06:29:08.937 回答