web-dev-qa-db-ja.com

(asp.netを使用して)ダウンロードする代わりに、新しいタブまたはウィンドウでPDFファイルを開く方法は?

これは、ファイルをダウンロードするためのコードです。

System.IO.FileStream fs = new System.IO.FileStream(Path+"\\"+fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
byte[] ar = new byte[(int)fs.Length];
fs.Read(ar, 0, (int)fs.Length);
fs.Close();

Response.AddHeader("content-disposition", "attachment;filename=" + AccNo+".pdf");
Response.ContentType = "application/octectstream";
Response.BinaryWrite(ar);
Response.End();

このコードが実行されると、ファイルを開くか保存するようユーザーに要求します。これの代わりに、新しいタブまたはウィンドウを開き、ファイルを表示する必要があります。どうすればこれを達成できますか?

注:

ファイルはウェブサイトのフォルダーにある必要はありません。他のフォルダーにある可能性があります。

14
smilu

ストリームをバイト配列にロードして応答ストリームに書き込む代わりに、 HttpResponse.TransmitFile を見る必要があります。

Response.ContentType = "Application/pdf";
Response.TransmitFile(pathtofile);

PDFを新しいウィンドウで開く場合は、次のように、ダウンロードページを新しいウィンドウで開く必要があります。

<a href="viewpdf.aspx" target="_blank">View PDF</a>
17
janzi
Response.ContentType = contentType;
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=" + fileName);
Response.BinaryWrite(fileContent);

そして

<asp:LinkButton OnClientClick="openInNewTab();" OnClick="CodeBehindMethod".../>

JavaScriptの場合:

<script type="text/javascript">
    function openInNewTab() {
        window.document.forms[0].target = '_blank'; 
        setTimeout(function () { window.document.forms[0].target = ''; }, 0);
    }
</script>

reset targetに注意してください。そうでなければ、Response.Redirectは新しいタブで開きますが、これはあなたが望むものではないかもしれません。

8
Nina

これは役立つかもしれません

Response.Write("<script>");
Response.Write("window.open('../Inventory/pages/printableads.pdf', '_newtab');");
Response.Write("</script>");
3
Karthik

PDFを生成するには、コードを使用して別のページまたは汎用ハンドラーを作成する必要があります。次に、そのイベントがトリガーされ、ユーザーはそのページにリダイレクトされます。

1
Yetimandaddy

MVCアクションからFileResultを返すことができます。

********************* MVCアクション************

    public FileResult OpenPDF(parameters)
    {
       //code to fetch your pdf byte array
       return File(pdfBytes, "application/pdf");
    }

************** js **************

formpostを使用してデータをアクションに投稿します

    var inputTag = '<input name="paramName" type="text" value="' + payloadString + '">';
    var form = document.createElement("form");
    jQuery(form).attr("id", "pdf-form").attr("name", "pdf-form").attr("class", "pdf-form").attr("target", "_blank");
    jQuery(form).attr("action", "/Controller/OpenPDF").attr("method", "post").attr("enctype", "multipart/form-data");
    jQuery(form).append(inputTag);
    document.body.appendChild(form);
    form.submit();
    document.body.removeChild(form);
    return false;

データを投稿するフォームを作成し、domを追加し、データを投稿し、ドキュメント本文からフォームを削除する必要があります。

ただし、フォームポストはEdge browserでのみ新しいタブにデータをポストしません。しかし、get requestは、アクションパラメーターのクエリ文字列を含むURLで新しいタブを開くだけなので、機能します。

0
Harish Mashetty

ここでは、iTextSharp dllを使用してPDFファイルを開きます。PDFファイルをダウンロードする代わりに開きます。したがって、正常に動作する以下のコードを使用しています。私のために。今、PDFファイルはブラウザで開いています、今ダウンロードしています

        Document pdfDoc = new Document(PageSize.A4, 25, 10, 25, 10);
        PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
        pdfDoc.Open();
        Paragraph Text = new Paragraph("Hi , This is Test Content");
        pdfDoc.Add(Text);
        pdfWriter.CloseStream = false;
        pdfDoc.Close();
        Response.Buffer = true;
        Response.ContentType = "application/pdf";
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.End();

ファイルをダウンロードする場合は、このResponse.ContentType = "application/pdf"の後に以下の行を追加します。

Response.AddHeader("content-disposition", "attachment;filename=Example.pdf");   
0
Kashyap Diwan