none
problemas para configurar la impresion

    Question

  • hola, mi problema es que quiero imprimir en una hoja legal 4 fotos que estan en 4 rutas diferentes , pero cuando hago click en el boton para imprimir me imprime sin la configuracion que le asigno a la hoja(horizontal y con el papel indicado), y si le vuelvo a hacer click me funciona perfectamente. Yo quisiera saber en que le estoy errando de forma que al darle una sola vez click me imprima corectamente. si alguien me puede ayudar porque me estoy volviendo loco gracias ejje.

     

    este el codigo:

    private void button8_Click(object sender, EventArgs e)
            {
                int i = 1;

                try
                {

                   
                   
                        foreach (int item in listBox1.Items)
                        {

                            if (i % 4 == 0)
                            {
                                ruta1 = dataGridViewFotos.Rows[item - 1].Cells[2].Value.ToString();

                               
                               
                               
                                printDocument3.Print();
                            }
                            else
                            {
                                if (i % 3 == 0)
                                {

                                    ruta2 = dataGridViewFotos.Rows[item - 1].Cells[2].Value.ToString();
                                }
                                else
                                {
                                    if (i % 2 == 0)
                                    {

                                        ruta3 = dataGridViewFotos.Rows[item - 1].Cells[2].Value.ToString();
                                    }
                                    else
                                    {

                                        ruta4 = dataGridViewFotos.Rows[item - 1].Cells[2].Value.ToString();
                                    }
                                }
                            }


                            i++;
                        }

                    }
               
                catch (Exception ex)
                {
                    MessageBox.Show("error");
                }
            }

            private void printDocument3_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
            {
               
               
                    Image im = default(Image);
                    Image im2 = default(Image);
                    Image im3 = default(Image);
                    Image im4 = default(Image);

                    im = Image.FromFile(ruta1);
                    im2 = Image.FromFile(ruta2);
                    im3 = Image.FromFile(ruta3);
                    im4 = Image.FromFile(ruta4);

                    PaperSize legal = new PaperSize();
                    legal.RawKind = 5;
                   
                    printDocument3.DefaultPageSettings.PaperSize = legal;
                   
                    printDocument3.DefaultPageSettings.Landscape = true;
                   
                   

                    e.Graphics.DrawImage(im, 50, 14, 592, 392);
                    e.Graphics.DrawImage(im2, 744, 14, 592, 392);
                    e.Graphics.DrawImage(im3, 50, 420, 592, 392);
                    e.Graphics.DrawImage(im4, 744, 420, 592, 392);


                   
               
               
               
            }

    Thursday, January 05, 2012 2:22 PM

Answers

  • Hola Polarko yo he estado con eso y hasta el momento esto es lo que me ha servido todavía tengo que revisar bien lo de los margenes con la impresora Epson TM-U220 espero te sirva.

                doc = new PrintDocument();
                using (var dlg = new PageSetupDialog())
                {
                    dlg.Document = doc;
                    dlg.AllowMargins = true;
                    dlg.EnableMetric = true;
                    dlg.MinMargins = new Margins(0, 0, 0, 0);
                    dlg.PageSettings.Margins = new Margins(50, 50, 50, 50);
                    dlg.PrinterSettings.DefaultPageSettings.Margins = new Margins(50, 50, 50, 50);
                    dlg.PageSettings.PaperSize = new PaperSize("Custom", (int)CUnit.CnToCentesimaPulg(7.7f), (int)CUnit.CnToCentesimaPulg(20));
                   
                }
                doc.PrintPage += new PrintPageEventHandler(doc_PrintPage);

     

    En el caso de CUnit.CnToCentesimaPulg lo que tengo es la conversión de centímetro en Centesima Pulgada esta asi.

            public static float CnToCentesimaPulg(double _cent)
            {
                //21 cm / 2.54 = 8.2677 Pulgada
                //8.2677 * 100 = 826.77 Centesima Pulgada
               
                //Convertir Cenimetros a centesima de pulgada
                double pulg = _cent / 2.54f;
                double centPulg = pulg * 100;
                return (float)centPulg;
            }

     

    en el boton para ver antes de imprimir lo tengo asi

            private void bttnPreview_Click(object sender, EventArgs e)
            {
                printPreviewControl1.Document = doc;
                printPreviewControl1.Show();
            }

     

    Espero te sea de utilidad, Saludos


    Edchar
    • Marked as answer by polarko Friday, January 06, 2012 3:51 PM
    Thursday, January 05, 2012 7:32 PM

All replies

  • Hola Polarko yo he estado con eso y hasta el momento esto es lo que me ha servido todavía tengo que revisar bien lo de los margenes con la impresora Epson TM-U220 espero te sirva.

                doc = new PrintDocument();
                using (var dlg = new PageSetupDialog())
                {
                    dlg.Document = doc;
                    dlg.AllowMargins = true;
                    dlg.EnableMetric = true;
                    dlg.MinMargins = new Margins(0, 0, 0, 0);
                    dlg.PageSettings.Margins = new Margins(50, 50, 50, 50);
                    dlg.PrinterSettings.DefaultPageSettings.Margins = new Margins(50, 50, 50, 50);
                    dlg.PageSettings.PaperSize = new PaperSize("Custom", (int)CUnit.CnToCentesimaPulg(7.7f), (int)CUnit.CnToCentesimaPulg(20));
                   
                }
                doc.PrintPage += new PrintPageEventHandler(doc_PrintPage);

     

    En el caso de CUnit.CnToCentesimaPulg lo que tengo es la conversión de centímetro en Centesima Pulgada esta asi.

            public static float CnToCentesimaPulg(double _cent)
            {
                //21 cm / 2.54 = 8.2677 Pulgada
                //8.2677 * 100 = 826.77 Centesima Pulgada
               
                //Convertir Cenimetros a centesima de pulgada
                double pulg = _cent / 2.54f;
                double centPulg = pulg * 100;
                return (float)centPulg;
            }

     

    en el boton para ver antes de imprimir lo tengo asi

            private void bttnPreview_Click(object sender, EventArgs e)
            {
                printPreviewControl1.Document = doc;
                printPreviewControl1.Show();
            }

     

    Espero te sea de utilidad, Saludos


    Edchar
    • Marked as answer by polarko Friday, January 06, 2012 3:51 PM
    Thursday, January 05, 2012 7:32 PM
  • Edchar gracias por responder, igual encontre una solucion aunque no sea la mas efectiva. Use un pagesetupdialog para que la configure manualmente el usuario ya que configurarlo yo dentro del printdocument no me lo aceptaba

     

    gracias

    Friday, January 06, 2012 3:54 PM
  • que bueno que pudiste encontrar algo pero de todos modos te recomiendo que te des una vuelta por esta pagina me fue de mucha utilidad en el tema espero te sirva, solo que esta en ingles.

     

    http://codeidol.com/csharp/windows-forms-programming/Printing/Margins/

    http://drdobbs.com/184416821

    Saludos


    Edchar

    • Edited by Edchari Monday, January 09, 2012 4:44 PM
    Monday, January 09, 2012 4:38 PM