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

Windows Forms Discussion :

Comment ouvrir un fichier créé avec MemoryStream


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 76
    Points : 45
    Points
    45
    Par défaut Comment ouvrir un fichier créé avec MemoryStream
    bonjour,

    Je créé actuellement un pdf a la volée avec iTextSharp en utilisant un FileStream ce qui m'oblige a l'enregistrer sur le disque chose que je voudrai eviter

    j'ai trouvé ce code qui doit faire ce que je voudrai

    Code : 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
    // step 1
    	// need to write to memory first due to IE wanting
    	// to know the length of the pdf beforehand
    	MemoryStream m = new MemoryStream();
    	Document document = new Document();
    	try {
    		// step 2: we set the ContentType and create an instance of the Writer
    		Response.ContentType = "application/pdf";
    		PdfWriter.getInstance(document, m);
     
    		// step 3
    		document.Open();
     
    		// step 4
    		document.Add(new Paragraph(DateTime.Now.ToString()));
    	} catch (DocumentException ex) {
    		Console.Error.WriteLine(ex.StackTrace);
    		Console.Error.WriteLine(ex.Message);
    	}
    	// step 5: Close document
    	document.Close();
     
    	// step 6: Write pdf bytes to outputstream
    	Response.OutputStream.Write(m.GetBuffer(), 0, m.GetBuffer().Length);
    	Response.OutputStream.Flush();
    	Response.OutputStream.Close();
    or dans ma classe je ne eux pas utiliser "Response" car il ne connais pas ce mot clé, j'ai esseyé cela mais ca ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HttpContext ctx = new HttpContext(null);
    ctx.Response. ...
    Merci d'avance de votre aide car la je suis vraiment bloqué.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 76
    Points : 45
    Points
    45
    Par défaut
    voila mon code actuel avec le FileStream

    Code : 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
    public static void createPdf(String path)
        {
     
            Document document = new Document(PageSize.A4.Rotate(), -70, -19, 10, 0);
     
            try
            {
                PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(path, FileMode.Create));
     
                document.Open();
     
                //Remplissage du pdf...
     
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            document.Close();
     
            System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(path);
            System.Diagnostics.Process.Start(psi);
    Que dois-je remplacer pour éviter de l'enregister sur le disque, tout en continuant à l'afficher directement ?

    merci d'avance de votre aide

  3. #3
    Membre actif
    Inscrit en
    Octobre 2007
    Messages
    236
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2007
    Messages : 236
    Points : 233
    Points
    233
    Par défaut
    MemoryStream est un flux créé et géré en mémoire. Ton document PDF va être ouvert par un autre programme (AcrobatReader ou autre). A moin que le programme de visualisation de ton document propose un protocole d'échange de données mémoire/mémoire, je vois pas comment tu peux passer un document à partir de ton application vers un autre programme sans passer par un fichier.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 76
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par emmr.rida Voir le message
    MemoryStream est un flux créé et géré en mémoire. Ton document PDF va être ouvert par un autre programme (AcrobatReader ou autre). A moin que le programme de visualisation de ton document propose un protocole d'échange de données mémoire/mémoire, je vois pas comment tu peux passer un document à partir de ton application vers un autre programme sans passer par un fichier.
    Merci pour ton aide.

    Actuellement le pdf est créé physiquement (si je peux dire) sur le disque à l'endroit que je lui donne ("path")
    et est ensuite ouvert avec Acrobat reader grace au 2 dernieres commandes.

    je voudrai (si c'est possible) l'afficher directement.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 76
    Points : 45
    Points
    45
    Par défaut
    je cherche en fait a remplacer ces 3 lignes là de l'exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Response.OutputStream.Write(m.GetBuffer(), 0, m.GetBuffer().Length);
    Response.OutputStream.Flush();
    Response.OutputStream.Close();

    mais je n'ai pas trouvé leur equivalent pour mon appli windows

    si quelqu'un a une piste

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2012
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    je dois créer un memory stream contenant différent PDF et supprimer les pdfs ensuite. Je dois ensuite afficher les memory stream de ces pdfs dans un webrowser. Est-ce possible ? et comment faire ?

  7. #7
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Le code que tu as trouvé comme exemple qui utilise l'objet "Response" est pour un site web.

    Au lieu générer le fichier sur un disque du serveur, on l'envoie directement sous forme de flux de données au client web.

    Le client web dispose du support d'un protocole permettant de récupérer des flux de mémoire réseau (HTTP).

    Il stocke alors le fichier sur le disque (le cache disque).

    Puis demande à un programme externe (module, Adobe Reader, etc.) d'ouvrir le fichier et de l'afficher.

    Il y a bel et bien un stockage du fichier sur le disque. Et c'est obligatoire si tu veut utiliser Adobe Reader.

    Tu peut aussi t'amuser à faire une class permettant de lire un PDF et de l'afficher (et ainsi n'utiliser que des traitements mémoire) mais là tu vas y passer les 6 prochains mois...

    En revanche, je te conseille, plutôt que de générer le fichier dans un "path" donné, et ne pas savoir quoi en faire ensuite, de passer par un fichier temporaire :

    Code : 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
     
    temp = Path.ChangeExtension(Path.GetTempFileName(), "pdf");
     
                    ProcessStartInfo psi = new ProcessStartInfo(temp);
                    Process p = new Process();
                    p.StartInfo = psi;
     
                    if (p.Start())
                    {
                        p.WaitForExit();
                    }
                    else
                    {
    // Personnellement, j'ai pas compris pourquoi, mais parfois j'entre ici alors que le programme est démarré, mais bon
                        MessageBox.Show("Can't start the program");
                    }
     
                    bool deleted = false;
                    while (!deleted)
                    {
                        try
                        {
                            File.Delete(temp);
                            deleted = true;
                        }
                        catch
                        {
                            Thread.Sleep(100);
                        }
                    }
    Attention : Ce code ouvre le programme associé à l'extension PDF. Si tu veux passer par un webbrowser, alors il faut passer le nom du fichier au webbrowser. Et faire le delete dans le form.OnClosing(), sinon tu risques d'avoir des soucis...
    On ne jouit bien que de ce qu’on partage.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Points : 4
    Points
    4
    Par défaut je reprends la discution
    j'essaie ton code et je dis quoi après si ça marche et comment, car il me semble qu'il manque 1 ligne ...

    jack

Discussions similaires

  1. Comment Ouvrir un fichier swf avec IE en VBScript ?
    Par hackoofr dans le forum VBScript
    Réponses: 2
    Dernier message: 24/03/2011, 22h52
  2. Comment ouvrir un fichier excel avec une commande batch ?
    Par Alexandrebox dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 18/03/2010, 13h15
  3. Comment ouvrir un fichier archivé avec FILESTREAM
    Par launay dans le forum Langage
    Réponses: 4
    Dernier message: 18/12/2009, 21h55
  4. Comment ouvrir un fichier .xla avec excel ?
    Par Australia dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/11/2006, 18h08
  5. comment ouvrir un fichier XML avec excel
    Par ALCINA dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 24/03/2006, 14h42

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