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

C# Discussion :

impression de plusieurs images


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut impression de plusieurs images
    Bonjour;


    Je cherche à automatiser l'impression de plusieurs images et j'ai eu des problèmes :

    voila mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     List<image> images = GetImagesToPrint(currentPageToPrint);
    et pour lancer l'impression j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                    PrintDocument PrintDoc = new PrintDocument();
                    PrintDialog DPrint = new PrintDialog();
                    PrintDoc.PrintPage += new PrintPageEventHandler(_PrintDoc_PrintPage);
                    PrinterSettings settingPrinter = new PrinterSettings();
                    settingPrinter.FromPage = 0;
                    settingPrinter.ToPage = doc.PageCount;
                    settingPrinter.MaximumPage = doc.PageCount;
                    settingPrinter.MinimumPage = 1;
                    DPrint.PrinterSettings = settingPrinter;
                    DPrint.Document = PrintDoc;
                    PrintDoc.Print();
    et event
    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
     
     void _PrintDoc_PrintPage(object sender, PrintPageEventArgs e)
            {
     
                e.HasMorePages = true;
                           int RenderDPI = 200;
                 foreach (System.Drawing.Image image in PDFPages)
                  {
                      /* code pour adapter la taille de image*/
                       e.Graphics.DrawImage(image, 0, 0);
                        image.Dispose();
                   }
                 e.HasMorePages = false;
     
            }
    Erreur

    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
     
    System.OutOfMemoryException: Mémoire insuffisante.
       à System.Drawing.Graphics.CheckErrorStatus(Int32 status)
       à System.Drawing.Graphics.DrawImage(Image image, Int32 x, Int32 y)
       à PDFViewer.PDFUtil._PrintDoc_PrintPage(Object sender, PrintPageEventArgs e) dans c:\Users\MS-Dev\Desktop\PdfViewerUI\PdfViewerUI\PDFViewer\PDFUtil.cs:ligne 306
       à System.Drawing.Printing.PrintDocument.OnPrintPage(PrintPageEventArgs e)
       à System.Drawing.Printing.PrintDocument._OnPrintPage(PrintPageEventArgs e)
       à System.Drawing.Printing.PrintController.PrintLoop(PrintDocument document)
       à System.Drawing.Printing.PrintController.Print(PrintDocument document)
       à System.Drawing.Printing.PrintDocument.Print()
       à PDFViewer.PDFUtil.PrintPDF() dans c:\Users\MS-Dev\Desktop\PdfViewerUI\PdfViewerUI\PDFViewer\PDFUtil.cs:ligne 209
       à PDFViewer.PDFViewer.tsPrint_Click(Object sender, EventArgs e) dans c:\Users\MS-Dev\Desktop\PdfViewerUI\PdfViewerUI\PDFViewer\PDFViewer.cs:ligne 34
       à System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
       à System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
       à System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
       à System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
       à System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
       à System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
       à System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
       à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       à System.Windows.Forms.Control.WndProc(Message& m)
       à System.Windows.Forms.ScrollableControl.WndProc(Message& m)
       à System.Windows.Forms.ToolStrip.WndProc(Message& m)
       à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       à System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    Si il y'a une autre manière de lancer l'impression je suis preneur


    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Est-ce qu'il y a beaucoup d'images dans ta liste d'images "images"?

    Et dans ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    foreach (System.Drawing.Image image in PDFPages)
                  {
                      /* code pour adapter la taille de image*/
                       e.Graphics.DrawImage(image, 0, 0);
                        image.Dispose();
                   }
    à quoi fait référence la variable "PDFPages"?

  3. #3
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    dans mon fichier de test c'est 73 pages.mais l'erreur se fait dans la deuxième image

  4. #4
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    le besoin initiale c'est pour pourvoir imprimer un fichier PDF sans passer par acrobate reader ...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par azstar Voir le message
    dans mon fichier de test c'est 73 pages.mais l'erreur se fait dans la deuxième image
    Oui, mais si je t'ai posé les questions ci-dessus bien précises, c'était pour savoir si tu chargeais beaucoup d'images en mémoire centrale.

    Par exemple, si avec l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<image> images = GetImagesToPrint(currentPageToPrint);
    tu charges 73 grosses images, alors le "drawimage" où tu le vois faire une exception est sans doute la "goutte d'eau qui fait déborder le vase" si tu vois ce que je veux dire.

    La solution serait de ne charger chaque image en mémoire centrale seulement quand tu t'apprêtes à la dessiner dans ton objet "Graphics".

    Cela peut se faire par exemple en faisant une classe "ImageLoader" qui renvoie un "IEnumerable<Image>" des images et derrière, on s'assure qu'il n'y a qu'une seule image chargée en MC à la fois (avec une petite implémentation spécifique de "IEnumerator<Image>".

    [EDIT] Voici un morceau de code incomplet qu'il te faudra compléter mais dont l'idée est là :
    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
     
    using System;
    using System.Collections.Generic;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace Demonstration
    {
    	static class ImagesLoader
    	{
    		public static IEnumerable<Image> GetImages(string pdffilePath)
    		{
    			Image currentImage = null;
     
    			//Faire ici le parcours avec une boucle dans le fichier pdffilePath. Pour chaque image trouvée, faire les instructions suivantes :
    			{
    				yield return currentImage;
     
    				currentImage.Dispose();
    			}
    		}
    	}
    }
    et ensuite, il n'y a plus qu'à les appeler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IEnumerable<Image> toutesLesImages = ImagesLoader.GetImages(string pdffilePath);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    foreach (System.Drawing.Image image in toutesLesImages)
                  {
                      /* code pour adapter la taille de image*/
                       e.Graphics.DrawImage(image, 0, 0);
                        image.Dispose();
                   }
    Dernière modification par Invité ; 14/05/2014 à 12h43.

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/01/2007, 19h31
  2. [Rave reports] impression de plusieurs états ??
    Par Goldenkiller dans le forum Bases de données
    Réponses: 4
    Dernier message: 06/08/2004, 16h30
  3. [DirectDraw7] Affichage de plusieurs image bmp
    Par SteelBox dans le forum DirectX
    Réponses: 3
    Dernier message: 24/04/2004, 19h00
  4. Economie de mémoire pour plusieur images avec la même source
    Par neness dans le forum Composants VCL
    Réponses: 5
    Dernier message: 18/01/2004, 10h56
  5. [BPW] Impression d'une image BMP
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 21/08/2003, 14h34

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