Impression

panpan49 Messages postés 4 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 8 mai 2006 - 6 mai 2006 à 17:52
cs_wizad Messages postés 355 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 14 avril 2009 - 9 mai 2006 à 21:35
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

cs_wizad Messages postés 355 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 14 avril 2009
9 mai 2006 à 21:35
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.
0
Rejoignez-nous