在代码后面设置onclick为Anchor标签下载pdf

时间:2012-04-09 22:59:31

标签: c# asp.net html

我正在尝试在代码隐藏中使用锚点,并在单击该锚点时下载pdf。我在页面加载时下载了正常工作的东西,但我不知道如何设置onlick来下载pdf。

HtmlAnchor apdf = new HtmlAnchor();
apdf.ID = Guid.NewGuid().ToString("N");
apdf.InnerText = dsreport.Tables[0].Rows[0]["ImageName"].ToString();
apdf.Attributes.Add("style", "font-weight: bold; font-size: 13px; margin: 0px;font-family: Arial; color: #1e7c9b; text-decoration: underline");
apdf.Attributes.Add("onclick", "");

对于每个onclick,我必须设置以下代码,所以pdf只能在点击时下载。

byte[] aByteArrayOfTheFile = (byte[])(dsreport.Tables[0].Rows[0]["ImageData"]);
SendAsFileToBrowser(aByteArrayOfTheFile, "application/pdf", "downloaded.pdf");

更新:

 public static string SendAsFileToBrowser(byte[] File, string Type, string FileName)
 {
    string disp = "attachment";
    if (string.IsNullOrEmpty(FileName))
    {
        disp = "inline";
    }

    // set headers
    //char r = HttpContext.Current.Response;

    HttpContext.Current.Response.ContentType = Type; // eg "image/Png"
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.AddHeader("Content-Type", "binary/octet-stream");
    HttpContext.Current.Response.AddHeader("Content-Length", File.Length.ToString());
    HttpContext.Current.Response.AddHeader("Content-Disposition", disp + "; filename=" + FileName + "; size=" + File.Length.ToString());
    HttpContext.Current.Response.Flush();       

    // write data to requesting browser
    HttpContext.Current.Response.BinaryWrite(File);
    HttpContext.Current.Response.Flush();
    return "";
}

使用它会在页面加载上打开,而不是在Onclick上打开。仅在用户点击时下载。

我在VS 2005和sql server 2005中使用c#2.0。设置onclick后面的代码真是一团糟。提前感谢您的帮助!!

2 个答案:

答案 0 :(得分:1)

如果您希望在浏览器中查看pdf,请尝试此操作

apdf.Attributes.Add(“onclick”,“window.location.href ='.. / linktopdf / thepdf.pdf;'”);

如果你想下载pdf,你可以创建一个ashx web服务,其内容类型响应设置为application / pdf作为响应,并从那里下载它作为byes。然后应出现下载窗口。

这是指向有用线程的链接:

How to force a pdf download automatically?

答案 1 :(得分:0)

哦,我现在看到你需要什么。试试这个:

    apdf.Click += new EventHandler(this.SendAsFileToBrowser);   

    container.Controls.Add(apdf);      

并确保将此代码放在页面的Pre_Init方法中而不是Page_load。

试试这个,让我知道它是怎么回事。