Как открыть PDF файл в новой вкладке или окне вместо его загрузки (используя asp.net)?

Это код для загрузки файла.

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();

Когда этот код будет выполнен, он попросит пользователя открыть или сохранить файл. Вместо этого мне нужно открыть новую вкладку или окно и отобразить файл. Как я могу достичь этого?

Примечание:

Файл не требуется размещать в папке веб-сайта. Он может быть расположен в другой папке.

Ответ 1

Вместо того, чтобы загружать поток в массив байтов и записывать его в поток ответов, вы должны посмотреть HttpResponse.TransmitFile

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

Если вы хотите открыть PDF в новом окне, вам нужно будет открыть страницу загрузки в новом окне, например:

<a href="viewpdf.aspx" target="_blank">View PDF</a>

Ответ 2

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, будут открываться на новой вкладке, которая может быть не такой, какой вы хотите.

Ответ 3

это может помочь

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

Ответ 4

Вам нужно создать либо другую страницу, либо общий обработчик с кодом для создания вашего pdf. Затем это событие активируется, и человек перенаправляется на эту страницу.

Ответ 5

вы можете вернуть FileResult из своего действия MVC.

********************* Действие MVC ************

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

************** ************** JS

Использовать форматирование для публикации ваших данных в действии

    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;

Вам нужно создать форму для публикации своих данных, добавить ее в свой дом, опубликовать свои данные и удалить форму вашего тела документа.

Однако сообщение формы не будет отправлять данные на новую вкладку только в браузере EDGE. Но получить запрос работает, поскольку он просто открывает новую вкладку с URL-адресом, содержащим строку запроса для ваших параметров действия.

Ответ 6

Здесь я использую 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");   

Ответ 7

Мне нужно было открыть PDF файл (который будет храниться на сервере) в новой вкладке. Ответ Polo Guys был единственным, что сработало, несмотря на то, что его проголосовали 5 раз.

Ответ 8

Используйте этот код. Это работает как чемпион.

Process process = new Process();
process.StartInfo.UseShellExecute = true;
process.StartInfo.FileName = outputPdfFile;
process.Start();