我正在尝试在代码隐藏中使用锚点,并在单击该锚点时下载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后面的代码真是一团糟。提前感谢您的帮助!!
答案 0 :(得分:1)
如果您希望在浏览器中查看pdf,请尝试此操作
apdf.Attributes.Add(“onclick”,“window.location.href ='.. / linktopdf / thepdf.pdf;'”);
如果你想下载pdf,你可以创建一个ashx web服务,其内容类型响应设置为application / pdf作为响应,并从那里下载它作为byes。然后应出现下载窗口。
这是指向有用线程的链接:
答案 1 :(得分:0)
哦,我现在看到你需要什么。试试这个:
apdf.Click += new EventHandler(this.SendAsFileToBrowser);
container.Controls.Add(apdf);
并确保将此代码放在页面的Pre_Init方法中而不是Page_load。
试试这个,让我知道它是怎么回事。