2010-01-22 8 views
1

Lorsqu'un utilisateur clique sur un lien, il ouvre une nouvelle fenêtre (puisque target = "_ blank") appelle une page xyz.ASPX qui créera dynamiquement une facture PDF, l'enregistrant dans une base de données (pas un emplacement physique) et puis je dois être en mesure d'ouvrir le fichier PDF dans la page ASPX.Afficher le fichier PDF dans ASPX non acrobat

Maintenant, ce qui se passe, c'est que l'aspx qui génère le fichier PDF est appelé, il fait ses choses, mais ouvre ensuite Acrobat pour afficher la facture PDF. Cependant, la page xyz.aspx est vide et n'affiche rien. Je n'aime pas ça et voudrais que xyz.aspx affiche le fichier PDF. D'après mes recherches, il semble que si vous voulez afficher le PDF dans la page ASPX, vous avez besoin d'un iFrame ou d'un contrôle personnalisé. Cependant, puisque le PDF est créé dynamiquement et non stocké sur le disque, comment puis-je définir la source de l'iFrame. Est-il possible de définir le src comme un objet de réponse ou un autre objet en mémoire?

Existe-t-il un moyen facile de le faire? Je ne veux pas utiliser un contrôle personnalisé. J'utilise .NET 3.5 et C# avec des pages maîtres et des thèmes CSS mais je l'ai désactivé pour cette page.

Sourcexyz.aspx:

`<% @ Page language = "C#" EnableTheming = "false"
ContentType = "application/pdf" behind = "xyz.aspx.cs" AutoEventWireup = "true" Inherits = "namespace1.xyz" %>

'

xyz.aspx.cs (obtient le fichier PDF à partir du DB et écrit ensuite objet Response)

protected void Page_Load(object sender, EventArgs e) 
    { 
     byte[] pdfBinaryFile = GetPDFFileFromDB(PDFId); 

     if(pdfBinaryFile != null) 

      Response.BinaryWrite(pdfBinaryFile); 

}

Répondre

0

Rechercher des informations sur ce que les en-têtes à utiliser pour ce ici: PHP header examples (Content- La disposition est une question importante je pense). Peut-être que cela aidera.

1

Regardez dans les gestionnaires personnalisés (fichiers .ashx) et Response.Write. Bien que vous soyez un peu à la merci d'Adobe parce que je ne pense pas que leur plugin joue bien dans les iframes. Une chose que je voudrais regarder est au lieu d'afficher le PDF, à la place avoir un aperçu HTML, puis avoir un lien afin que l'utilisateur peut télécharger le PDF réel. Ce serait une façon beaucoup plus saine de le faire parce que les gens sans Acrobat vont obtenir une belle boîte de téléchargement "pdf", peu importe si elle est dans un iframe ou non. (note: je dis Acrobat Il y a des gens qui ont un lecteur PDF mais pas un plugin lecteur PDF pour leur navigateur, comme moi)

Pour le téléchargement PDF, tout ce dont vous avez besoin est un gestionnaire HTTP personnalisé qui reçoit un chaîne de requête indiquant le PDF à télécharger. (Et donc, ne nécessiterait pas l'écriture du PDF sur le disque)

1

Essayez d'ajouter un en-tête Content-Disposition: inline:

protected void Page_Load(object sender, EventArgs e) 
{ 
    byte[] pdfBinaryFile = GetPDFFileFromDB(PDFId); 

    if (pdfBinaryFile != null) 
    { 
     Response.Clear(); 
     Response.ContentType = "application/pdf"; 
     Response.AppendHeader(
      "Content-Disposition", "inline; filename=\"test.pdf\""); 
     Response.BinaryWrite(pdfBinaryFile); 
     Response.End(); 
    } 
} 
Questions connexes