web-dev-qa-db-fra.com

Comment ouvrir PDF déposer dans un nouvel onglet ou une nouvelle fenêtre au lieu de le télécharger (en utilisant asp.net)?

C'est le code pour télécharger le fichier.

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

Lorsque ce code est exécuté, il demandera à l'utilisateur d'ouvrir ou de sauvegarder le fichier. Au lieu de cela, je dois ouvrir un nouvel onglet ou une nouvelle fenêtre et afficher le fichier. Comment puis-je atteindre cet objectif?

REMARQUE:

Le fichier ne sera pas nécessairement situé dans le dossier du site Web. Il se peut qu'il soit situé dans un autre dossier.

13
smilu

Au lieu de charger un flux dans un tableau d'octets et de l'écrire dans le flux de réponse, vous devriez jeter un oeil à HttpResponse.TransmitFile

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

Si vous voulez que le PDF s'ouvre dans une nouvelle fenêtre, vous devez ouvrir la page de téléchargement dans une nouvelle fenêtre, par exemple comme ceci:

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

Et

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

En javaScript:

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

Prenez soin de reset target , sinon tous les autres appels comme Response.Redirect s'ouvriront dans un nouvel onglet, ce qui pourrait ne pas être ce que vous voulez. 

6
Nina

cela peut aider

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

Vous devez créer une autre page ou un gestionnaire générique avec le code pour générer votre pdf. Ensuite, cet événement est déclenché et la personne est redirigée vers cette page. 

1
Yetimandaddy

vous pouvez retourner un FileResult à partir de votre action MVC.  

********************** Action du MVC *************

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

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

Utilisez formpost pour publier vos données en action

    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;

Vous devez créer un formulaire pour publier vos données, y ajouter votre nom de domaine, publier vos données et supprimer le formulaire du corps de votre document.

Toutefois, la publication de formulaire ne publierait pas les données dans un nouvel onglet uniquement sur Navigateur Edge . Mais un get request fonctionne car il s’agit d’ouvrir un nouvel onglet avec une URL contenant une chaîne de requête pour vos paramètres d’action.

0
Harish Mashetty

Ici, j'utilise iTextSharp dll pour générer le fichier PDF . Je veux ouvrir le fichier PDF au lieu de le télécharger . J'utilise donc le code ci-dessous qui fonctionne très bien pour moi .Now le fichier pdf s'ouvre dans le navigateur, maintenant le téléchargement

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

Si vous souhaitez télécharger le fichier, ajoutez la ligne ci-dessous après. Response.ContentType = "application/pdf";

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