IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Afficher un PDF dans le navigateur


Sujet :

ASP.NET

  1. #1
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut Afficher un PDF dans le navigateur
    Bonjour.

    Voilà le contexte : J'ai un site Web A qui doit afficher des PDF provenant d'une application Extranet B. Mon serveur Web A "voit" B, mais le client (navigateur) lui ne le voit pas. B propose un service qui renvoi un fichier PDF. Le but est que le client puisse afficher ce PDF dans son navigateur. Il faut donc que A lise le flux Http envoyé par B et le retransmette à A.

    J'ai donc mis le code suivant dans une page Web de A :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:2862/Duplicata/Default.aspx");
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
     
    ASCIIEncoding encoding = new ASCIIEncoding();
    string postData = string.Format("demande={0}", "mondoc");
    byte[] data = encoding.GetBytes(postData);
    request.ContentLength = data.Length;
     
    using (Stream streamData = request.GetRequestStream())
    {
    	streamData.Write(data, 0, data.Length);
    	HttpWebResponse response = (HttpWebResponse)request.GetResponse();
     
    	Response.Clear();
    	Response.ClearContent();
    	Response.ClearHeaders();
    	Response.ContentType = "application/pdf";
    	Response.Charset = "";
     
    	Stream reader =response.GetResponseStream();
    	Stream writer = Response.OutputStream;
     
    	byte[] buffer = new byte[1024];
     
    	while ((reader.Read(buffer, 0, buffer.Length) > 0))
    	{
    		writer.Write(buffer, 0, buffer.Length);
    	}
    	reader.Close();
    	reader.Dispose();
    	response.Close();
     
    	Response.Flush();
    	Response.Close();
    }

    Seulement mon document PDF ne s'ouvre pas. Pourtant ma fenêtre de navigateur "change" bien avec les contour de Acrobat Reader, mais pas de contenu dedans.
    J'ai essayé d'enregistrer mon PDF dans un fichier avant de le mettre dans le flux. Le fichier se créé, mais quand je l'ouvre il me dis qu'il est endommagé.

    En comparant les flux Http avec Fiddler, la seule différence que je vois entre le flux PDF de B et celui qu'envoi A au client, c'est le contentLength, plus gros de 141 octets entre A et le client. Sinon, le flux est identique (la partie correspondant au PDF à l'air OK et la taille aussi).

    Je ne comprends pas pourquoi ça ne fonctionne pas. Des idées ??

    Meci

  2. #2
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Bon j'ai du nouveau

    J'ai modifié quelque peu le code. Maintenant, quand j'enregistre mon fichier sur le disque, je peux le lire. De plus, mon PDF s'affiche correctement dans le navigateur quand celui est FIREFOX. Mais avec IE, il ne s'affiche pas. Problème : le navigateur cible sera IE

    Help !!

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    string demande = Request.QueryString["demande"].ToString();
     
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:2862/Duplicata/Default.aspx");
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
     
    ASCIIEncoding encoding = new ASCIIEncoding();
    string postData = string.Format("demande={0}", demande);
    byte[] data = encoding.GetBytes(postData);
    request.ContentLength = data.Length;
     
    using (Stream streamData = request.GetRequestStream())
    {
    	streamData.Write(data, 0, data.Length);
     
    	if (demande == "liste")
    	{
    		HttpWebResponse response = (HttpWebResponse)request.GetResponse();
     
    		Response.Clear();
    		Response.ClearContent();
    		Response.ClearHeaders();
    		Response.ContentType = "text/html";
    		Response.ContentEncoding = Encoding.UTF8;
     
    		using (StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream(), Encoding.UTF8))
    		{
    			string content = reader.ReadToEnd();
    			Response.Write(content);
    			reader.Close();
    		}
    		this.Response.Flush();
    	}
    	else
    	{
    		WebResponse response = request.GetResponse();
    		Response.ClearContent();
    		Response.Clear();
    		Response.ContentType = "application/pdf";
     
    		Stream reader = response.GetResponseStream();
    		FileStream file = File.Create(Server.MapPath("~/PDF.pdf"));
     
    		byte[] buffer = new byte[1024];
    		int len;
     
    		while ((len = reader.Read(buffer, 0, buffer.Length)) > 0)
    		{
    			file.Write(buffer, 0, len);
    			this.Response.OutputStream.Write(buffer, 0, len);
    		}
    		file.Close();
    	        file.Dispose();
    		reader.Close();
    		reader.Dispose();
    		response.Close();
     
    		this.Response.Flush();
    	}
     
    	streamData.Close();
    }
    this.Response.End();

  3. #3
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    OK, j'ai résolu mon PB en fouillant un peu sur le Net

    Il s'agit bien d'un bug IE. Et le fix pour corriger ce truc c'est de rajouter dans l'URL de la page qui affichera le PDF une extension .pdf en fin d'URL, comme par exemple :

    <a href="mapage.aspx?iefix=fix.pdf">

    Sacré Internet Explorer, il nous fera toujours rire avec ses bugs à la noix.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. afficher un document PDF dans le navigateur ASP.net
    Par jpljava dans le forum ASP.NET
    Réponses: 2
    Dernier message: 28/06/2010, 13h47
  2. afficher un pdf dans le navigateur
    Par ahlem83 dans le forum Documents
    Réponses: 0
    Dernier message: 03/08/2009, 17h52
  3. Réponses: 17
    Dernier message: 18/10/2007, 17h36
  4. Afficher un pdf dans un cadre d'objet
    Par ctl1970 dans le forum Access
    Réponses: 4
    Dernier message: 16/10/2006, 19h14
  5. [PDF] Afficher un pdf dans une page web
    Par hutchuck dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 16/01/2006, 11h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo