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 :

Truc pour calculer le numero de page à imprimer


Sujet :

C#

  1. #1
    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 Truc pour calculer le numero de page à imprimer
    Bonjour

    Existe-il un "truc" simple pour calculer un numero de page avant impression ?

    Je m'explique
    Je dois imprimmer un document qui fait plusieurs page
    Ma methode d'impression calcule donc la position du curseur sur la page et utilise la proprieté HasMorePage de l'event d'impression pour generer les ruptures

    Le problème c'est que ce calcul se fait en cours d'impression et si le document fait 30 pages je voudrais trouver la maniere la plus simple de n'mprimer par exemple que la page numéro 10

    Donc idealement je devrais pouvoir dans la methode d'impression lors d'une rupture dire "continue mais n'imprimme pas ceci"

    Une idée ?
    C'est peut-etre idiot, mais je seche
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    La solution que j'utilise consiste à faire une impression préalable à "vide" .
    Dans l'impression à vide, au premier traitement de l'event printpage et donc de "hasmorepage", on exécute toutes les générations de pages, on compte et on aborte l'impression " à vide". Il reste plus qu'à lancer l'impression normale.

    Le code ressemblera à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    internal int PageCount // -1 si impresssion à vide, Nb pages si impression normale
    private void Doc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
    { 
      if (PageCount<0) 
      { 
         PageCount=1 ;
         while (DrawPage(e.Graphics)) PageCount++ ;
         e.Cancel = true ; 
       }
       else e.HasMorePages=DrawPage(e.Graphics) ;
     }
    // la fonction DrawPage crée la page suivante et renvoie true si il y a une page suivante
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  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 Graphito

    L'impression "a vide" c'est ce a quoi je pensais mais je ne suis pas certain que ton système permet cela dans mon cas

    Mon intention n'est pas comme tu semble le faire, de calculer le nombre de page total avant l'impression mais par exemple de commencer le print a partir de la page 7 et l'arreter a la page 10 (sur un document de 30 page)

    e.cancel detruit tout le document si j'ai bien compris
    Ce qui serait genial c'est d'avoir un cancel par page mais ca je n'ai pas trouvé

    Je peux m'en sortir en faisant un pseudo-print en utilisant le graphics et le printersettings exterieurement a l'event PrintPage pour calculer la position des data ou il faut commencer le print mais c'est largement plus lourd comme adaptation
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Désolé, j'avais pas tout lu et j'ai juste répondu à la première question :
    Existe-il un "truc" simple pour calculer un numero de page avant impression ?
    Mais, pour imprimer les pages de 7 à 10, tu peux utiliser le même principe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    internal int PageDebut = 7;
    internal int PageFin = 10;
    internal int PageCur =0 ;
    private void Doc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
    { 
      bool MorePages=true ;
      for (PageCur++ ;PageCur<PageDebut && MorePages;PageCur++)
         MorePages=MorePages && DrawPage(e.Graphics)) ;
      e.HasMorePages=MorePages && DrawPage(e.Graphics) && PageCur<PageFin ;
     }
    // la fonction DrawPage crée la page suivante et renvoie true si il y a une page suivante
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  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
    Salut Graphito

    Tu ne passe que le e.Graphics a ton DrawPage

    Je ne suis pas certain que le page setting est inclus dedans : comment fais tu pour connaitre tes marges d'impressions (je me trompe peut-etre)

    Et il me semble aussi qu'avec cette methode tu "bourre" le graphics avec toutes les pages precedant celle a imprimer
    non ?
    A moins que tu fasse un clear du graphics en entrant dans DrawPage ??
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  6. #6
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Tu ne passe que le e.Graphics a ton DrawPage
    Je ne suis pas certain que le page setting est inclus dedans : comment fais tu pour connaitre tes marges d'impressions
    DrawPage connait la variable Doc de la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Doc=new PrintDocument() ;
    Doc.DocumentName = ... ;
    Doc.PrinterSettings = MyPrintDialog.PrinterSettings;
    Doc.DefaultPageSettings = MyPrintDialog.PrinterSettings.DefaultPageSettings;
    Doc.DefaultPageSettings.Margins = new Margins(40, 40, 40, 40);
    Doc.PrintPage += Doc_PrintPage ;
    Doc.DefaultPageSettings.Landscape = Landscape ;
    Doc.Print();
    il me semble aussi qu'avec cette methode tu "bourre" le graphics avec toutes les pages precedant celle a imprimer. non ?
    A moins que tu fasse un clear du graphics en entrant dans DrawPage ??
    OUI, voici le début de DrawPage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    internal bool DrawPage(Graphics DocGraphic) 
    {      
       DocGraphic.FillRectangle(new SolidBrush(Color.White),
                                        Doc.DefaultPageSettings.Bounds) ;
        ...
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  7. #7
    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
    OK on est sur la meme voie !
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

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

Discussions similaires

  1. Problème Dans boucle pour impression + nb de pages à imprimer
    Par Ricoeva84 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/09/2012, 09h41
  2. Affichage page par page des résultats avec des pointillés pour les numeros de page
    Par lewhechris dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 27/10/2011, 12h15
  3. [CXI]Numero / Nombre Pages pour un enregistrement
    Par say dans le forum SAP Crystal Reports
    Réponses: 9
    Dernier message: 29/05/2007, 09h51
  4. Réponses: 2
    Dernier message: 01/04/2003, 22h09

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