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 et propriété HasMorePage


Sujet :

C#

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

    Informations forums :
    Inscription : Juillet 2008
    Messages : 49
    Points : 55
    Points
    55
    Par défaut Impression et propriété HasMorePage
    Bonjour,

    J'ai quelques problèmes pour comprendre le fonctionnement de HasMorePage de PrintPageEventArgs. En effet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public PrintDocument pd = new PrintDocument();
     
       private void button_Click(object sender, EventArgs ev)
            {
                pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPage);
                pd.Print();
            }
    suivi de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       private void pd_PrintPage(object sender, PrintPageEventArgs ev)
            {       
                    Font font = new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point);
                    Brush brush = new SolidBrush(Color.Black);
                    ev.Graphics.DrawString("test ", font, brush, ev.MarginBounds.Left, ev.MarginBounds.Top);
                    ev.HasMorePages = true;          
            }
    imprime des pages en suivant toutes comprenant "test". Ce qui parait logique.

    alors que suivi de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
       private void pd_PrintPage(object sender, PrintPageEventArgs ev)
            {
                for (int i = 0; i < 10; i++)
                {
                    Font font = new Font("Tahoma", 10, FontStyle.Bold, GraphicsUnit.Point);
                    Brush brush = new SolidBrush(Color.Black);
                    ev.Graphics.DrawString("test "+i, font, brush, ev.MarginBounds.Left, ev.MarginBounds.Top);
                    ev.HasMorePages = true;
                }
                ev.HasMorePages = false;
            }
    Imprime une unique page sur laquelle le caractère i est illisible car écrasé à chaque "nouvelle page".

    Sauriez vous comment faire pour afficher 10 pages comprenant
    • "test 1" pour la premiere
    • "test 2" pour la deuxième
    • ...
    • "test 9" pour la dernière

    ?

    Je vous remercie pour votre aide.

  2. #2
    Futur Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Je relance cette discussion car je suis confronté au même problème, et je ne trouve pas de documentation claire sur la gestion du changement de page lors de l'impression et du comportement de l'événement PrintDocument.PrintPage

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Salut

    et je ne trouve pas de documentation claire sur la gestion du changement de page lors de l'impression et du comportement de l'événement PrintDocument.PrintPage
    Je fais le meme constat !!

    Bon dans ton exemple que tu a résolu depuis j'espere c'est clair que le HasMorePage=true dans ta boucle for n'a Aucun effet !!

    HasMorePage est un flag qui ne sera traité qu'a la sortie de p_Printpage

    Cela etant je trouve comme toi aujourd'hui qu'il manque de la doc pour bien comprendre Comment traiter correctement une impression de plusieurs pages distinctes !!

    Je cherche encore
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  4. #4
    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
    Citation Envoyé par Jatukam Voir le message
    Sauriez vous comment faire pour afficher 10 pages comprenant
    • "test 1" pour la premiere
    • "test 2" pour la deuxième
    • ...
    • "test 9" pour la dernière
    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
     
            // Impression de dix page une protrait, l'autre paysage et ainsi de suite...
            private int pageNumber = 0;
            private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
            {
                // Modifier e.PageSettings pour personnaliser la page en cours d'impression
                if(pageNumber % 2 == 0) {
                    e.PageSettings.Landscape = true;
                } else {
                    e.PageSettings.Landscape = false;
                }
                e.Graphics.DrawString("Page : " + (pageNumber + 1).ToString(), this.Font, Brushes.Black, e.PageBounds.Location);
                // Limiter le nombre de pages
                e.HasMorePages = ++pageNumber < 10;
            }
    A chaque événement PrintPage on a l'objet PrintPageEventArgs e qu'on peut personnaliser la e.PageSettings pour imprimer plusieurs pages chacune avec ces propres marges, orientation, etc. Biensure, on aura besoin de variables globales au niveau du formulaire pour les informations telles que le numéro de page en cours, le nombre maximal de pages à imprimer qu'on doit calculer depuis les données/document à imprimer.

  5. #5
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci

    Tu m'a aidé et confirmé que j'etais sur la bonne voie !
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  6. #6
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Bonjour

    En fait le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.PageSettings.Landscape
    ne change strictement rien !

    Il doit problement exister une autre maniere de "trigger" le changement d'orientation mais je n'ai pas encore trouver comment ?
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  7. #7
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Il faut modifier le DefaultSettings pour que le paramètre d'orientation soit pris en compte.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  8. #8
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci SaumonAgile

    J'avais aussi essayé mais sans succes

    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
        // **************************************************************************************
        void printDoc_PrintPage(object sender, PrintPageEventArgs e)
        {
    
          if (nbPage == 0)
          {
            printInfo(e);
            e.HasMorePages = true;
            nbPage = 1;
          }
          else
          {
            PrintDocument pd = (PrintDocument)sender;
            e.PageSettings.Landscape = true;
            pd.DefaultPageSettings.Landscape = true;
            printGrid(e);
            e.HasMorePages = false;
            nbPage = 0;
          }
          printFooter(e);
        }
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  9. #9
    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
    J'ai testé le code avant de le posté et ça marche pour moi.

  10. #10
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    La réponse est ici

    http://www.developpez.net/forums/d76...n-multi-pages/

    Pour bien faire, il faut utiliser l'event QueryPageSettings
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  11. #11
    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
    Il est possible d'imprimer chaque page d'un document avec des paramètres d'impression différents. Vous définissez les paramètres de la page en modifiant les propriétés individuelles de la propriété QueryPageSettingsEventArgs..::.PageSettings ou en affectant PageSettings à cette propriété. Les modifications apportées à PageSettings affectent uniquement la page active, pas les paramètres par défaut de la page. Le travail d'impression peut également être annulé en affectant la valeur true à la propriété Cancel pour QueryPageSettingsEventArgs.
    Source MSDN

    Oui, c'est vrai

Discussions similaires

  1. Impression des propriétés d'un objet
    Par DurDur dans le forum Access
    Réponses: 3
    Dernier message: 31/08/2012, 13h17
  2. Imprimer un formulaire "userform" avec la proprité d'impression Manual feed
    Par Ratatouille dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/07/2007, 18h14
  3. fonction imprimer, supprimer propriété de l'impression
    Par theotaki dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 13/05/2007, 12h34
  4. Fonction print avec les propriétés d'impression
    Par Alexandrebox dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/08/2006, 12h30
  5. modifier les propriétés d'impression
    Par zidenne dans le forum Delphi
    Réponses: 1
    Dernier message: 12/06/2006, 18h23

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