Impression

Signaler
Messages postés
4
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
8 mai 2006
-
Messages postés
355
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
14 avril 2009
-
Bonjour, j'essaie d'imprimer une texte box en c#, j'arrive un imprimer,
mais le problème est qu'il m'imprime les deux pages que j'ai taper, sur
une seul feuille.



        private void OnPrintClick(object sender, EventArgs e)

        {

            try

            {

                stringToPrint = new StringReader(TbTexteNew.Text);

                pdPrint.Document = PDDocument;

                

                try

                {

                    DialogResult result = pdPrint.ShowDialog();

                    printFont = new Font("Arial", 10);

                    PDDocument.PrintPage += new PrintPageEventHandler(this.pd_PrintPage);

                   

                    // If the result is OK then print the document.

                    if (result == DialogResult.OK)

                    {

                        PDDocument.Print();

                    }

                }

                finally

                {

                    stringToPrint.Close();

                }

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }



        private void pd_PrintPage(object sender, PrintPageEventArgs ev)

        {

            float linesPerPage = 0;

            float yPos = 0;

            float count = 0;

            float countColonne=0;

            float count2=0;

            float colonnePerLigne=80;

            float leftMargin = ev.MarginBounds.Left;

            float topMargin = ev.MarginBounds.Top;

            string line = null ;

            printFont.Size = 10;



            linesPerPage = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics);



            while (count < linesPerPage &amp;&amp; ((line = stringToPrint.ReadLine()) != null))

            {

                yPos = topMargin + (count * printFont.GetHeight(ev.Graphics));

                ev.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPos, new StringFormat());

                count++;

            }



            if (line == null)

            {

                ev.HasMorePages = false;

            }

            else

            {

                ev.HasMorePages = true;

            }

        }


est-ce que quelqu'un peut m dire ce qu'il cloche dans mon code?

projet helpdeveloppement
clan games

1 réponse

Messages postés
355
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
14 avril 2009

Dans ta méthode print_page il faut que tu détecte la page à imprimer (avec un compteur de page par exemple).
Le fait de passer HashMorePages à true, indique au programme quil y a une autre page à déssiné. Celui-ci réapelle donc la fonction pd_PrintPage (dans ton cas). Il faut donc dans cette fonction un switch pour choisir les informations à envoyé à l'impression pour la page en cours.

Exemple :

private int page = 1;
private int nbPage = 3;

private void doc_PrintPage(object sender, PrintPageEventArgs e)
{
// Simple définition de quelques éléments
int abscisse = 50;
int ordonnee = 50;
Font myFont = new Font("Arial", 12);
Brush PrintColor = Brushes.Black;

// On envoi la page qui correspond à l'imprimante
switch(page)
{
case 1:
e.Graphics.DrawString("Page 1", myFont, PrintColor, abscisse, ordonnee);
break;
case 2:
e.Graphics.DrawString("Page 2", myFont, PrintColor, abscisse, ordonnee);
break;
case 3:
e.Graphics.DrawString("Page 3", myFont, PrintColor, abscisse, ordonnee);
break;
}

if(page < nbPage)
{
page++; // Incrémente le numéro de la page à envoyer
e.HasMorePages = true; // Indique qu'il y a encore au moins une page à imprimer.
}
else
{ e.HasMorePages = false; } // Indique qu'il n'y a plus rien à imprimer
}

/* Fin de l'exemple */

Dans ton cas le switch n'est pas exploitable mais simplement un travail sur les lignes pour envoyer celle qui sont sur les différentes pages.
je t'ais indiqué le fonctionnement générale de l'impression à toi de l'adapter à tes besoins.