1

コードビハインドでアンカーを使用し、そのアンカーがクリックされたときに 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 を設定することは、私の頭の中で本当に混乱しています。助けてくれてありがとう!

4

2 に答える 2

1

PDFをブラウザで表示できるようにする場合は、これを試してください

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

PDF をダウンロードする場合は、コンテンツ タイプの応答を application/pdf に設定して ashx Web サービスを作成し、そこから byes としてダウンロードできます。ダウンロードウィンドウが表示されます。

役立つスレッドへのリンクは次のとおりです。

PDFのダウンロードを自動的に強制する方法は?

于 2012-04-09T23:07:26.743 に答える
0

ああ、今必要なものがわかります。これを試して:

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

    container.Controls.Add(apdf);      

そして、このコードを Page_load ではなく、ページの Pre_Init メソッドに必ず配置してください。

これを試して、どうなるか教えてください。

于 2012-04-10T08:01:28.703 に答える