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 :

PDF -> autre fenêtre


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut PDF -> autre fenêtre + Impression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    string cheminAcces = HttpContext.Current.Request.PhysicalApplicationPath;
    Response.ContentType = "application/pdf";
    Response.AddHeader("Content-Disposition,attachment","filename=foo.pdf");
    Response.Flush() ;
    Response.WriteFile(cheminAcces+"\\foo.pdf"); 
    Response.End();
    Response.Flush();
    Je reviens sur ce point.
    Le code ci dessus me convient parfaitement, mais je suis également confronté au problème de la nouvelle fenêtre.

    Mon client possède un extranet avec une page contenant un iframe. Je dois développer une application asp.net/C# qui récupère des pdf dans un répertoire et les ouvre.

    l'ouverture se passe bien, mais c'est la page active du site qui se remplace par le document. je dois pouvoir ouvrir dans un autre onglet (ie7 + , firefox, chrome) et un nouvel ie pour ie6...

    je ne vois pas trop comment faire pour forcer l'ouverture "à côté"

    merci d'avance.

  2. #2
    Membre chevronné Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Par défaut
    Bonjour,

    Je suppose que pour afficher le pdf en question l'utilisateur doit cliqué sur un bouton ou un lien.
    Pour ma part j'ai ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonTexte <a ID="I_IMPR" target="_blank" runat="server" HRef="MonChemin">
    le faite de mettre :
    ce qui ouvrira une nouvelle fenêtre que ce soit pour tout navigateur (par contre pour l'onglet je ne sais pas) .

    J'espère que ça t'aidera.

  3. #3
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    en fait, j'ai fait un nouvel apsx avec les méthodes de sécurité et le chargement du doc.

  4. #4
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    Bonjour, je reviens sur ce problème car il a légèrement évolué.

    dans ma page qui affiche la liste des pdf, je fais un appel comme ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <asp:HyperLink ID="lnkDocumentView" runat="server" NavigateUrl='<%# DataBinder.Eval(Container, "DataItem.Index", "~/Pages/DocumentView.aspx?id={0}") %>'>
        <%# DataBinder.Eval(Container, "DataItem.FileInfo.Name")%>
    </asp:HyperLink >
    c'est une partie du contenu d'un TemplateField d'une gridview.

    dans le Page_Load de DocumentView.aspx je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Response.Clear();
    Response.AddHeader("Content-Disposition,attachment", string.Format("filename={0}", Name)); 
    Response.ContentType = "application/pdf";
    Response.WriteFile(fullName);
    Response.End();
    Tout fonctionne le document s'affiche. Le problème se situe lors de l'enregistrement (soit par clique dans le reader (acrobat reader dans mon cas), soit clique droit sur le lien -> enregistrer la cible sous)

    Il propose comme nom DocumentView.pdf alors que le document se nomme CoachWebDevAtelier03.pdf.

    Lorsque l'utilisateur va vouloir enregistrer, il vas avoir un problème avec le nom du fichier... en bonne utilisateur, il voudrait juste cliquer sur "sauver" et hop le bon nom du pdf est mis...

    Si quelqu'un sait comment faire pour que la sauvegarde (des deux façons) donne le bon nom au fichier...

    merci d'avance.

  5. #5
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    J'ai trouvé une première erreur dans les entêtes :
    il fallait écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", file.Name));
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Response.AddHeader("Content-Disposition,attachment","filename=foo.pdf");
    du coup, mon fichier devient téléchargeable... mais ce n'est pas ce que je veux. il doit être ouvert DANS la page web (comme en l'absence du cette entête) mais si on clique pour enregistrer (clique droit sur le lien ou disquette adobe), il doit avoir le bon nom.

  6. #6
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    En fait, il fallait passer une url contenant aussi le nom de fichier
    c'est un peu mal fait, mais ça marche :

    côté aspx :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <asp:HyperLink ID="lnkDocumentView" runat="server" NavigateUrl='<%# DataBinder.Eval(Container, "DataItem.Index", "~/Pages/DocumentView.aspx?id={0}") %>'
    Text='<%# DataBinder.Eval(Container, "DataItem.FileInfo.Name")%>' />
    côté aspx.cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    protected void grdFiles_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if(e.Row.RowType == DataControlRowType.DataRow)
        {
            HyperLink lnkdocument = e.Row.FindControl("lnkDocumentView") as HyperLink;
            if(lnkdocument != null && lnkdocument.NavigateUrl.Contains("?"))
            {
                string toInsert = string.Format("/{0}?", lnkdocument.Text);
                lnkdocument.NavigateUrl = lnkdocument.NavigateUrl.Replace("?", toInsert);
            }
    [...]
    url générée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://.../Pages/DocumentView.aspx/toto.pdf?id=1
    dans la page DocumentView.aspx (Page_Load)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Response.Clear();
    Response.AddHeader("Content-Disposition,inline", string.Format("filename={0}", Name)); 
    Response.ContentType = "application/pdf";
    Response.WriteFile(fullName);
    Response.End();
    notons qu'il est préférable de faire Response.AppendHeader que AddHeader.


    si un jour quelqu'un est confronté au même problème...

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

Discussions similaires

  1. Récupérer les variables d'une autre fenêtre
    Par chuky dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 20/05/2012, 20h24
  2. Récupérer url d'une autre fenêtre contenant des frames
    Par coolhead dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/08/2005, 10h12
  3. ShowMessage "caché" derrière les autres fenêtres
    Par OutOfRange dans le forum Langage
    Réponses: 9
    Dernier message: 23/07/2005, 10h43
  4. Ajouter du texte dans un input à partir d'une autre fenêtre
    Par Michaël dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/04/2005, 20h14
  5. Récupérer l'adresse d'une autre fenêtre
    Par AlLutun dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/11/2004, 10h19

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