Múltiples páginas de documentos de impresión en c#

por favor alguno que me ayude , tengo que imprimir un documento de varias páginas en c#, me fui a través de internet, a continuación, utiliza este código pero no funciona, (bucle es empezar de nuevo después de la impresión de una página )

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
        try
        {
            Graphics graphic = e.Graphics;
            SolidBrush brush = new SolidBrush(Color.Black);

            Font font = new Font("Courier New", 12);

            float pageWidth = e.PageSettings.PrintableArea.Width;
            float pageHeight = e.PageSettings.PrintableArea.Height;

            float fontHeight = font.GetHeight();
            int startX = 40;
            int startY = 30;
            int offsetY = 40;


            for (int i = 0; i < 100; i++ )
            {

             graphic.DrawString("Line: " + i, font, brush, startX, startY + offsetY);
             offsetY += (int)fontHeight;

               if (offsetY >= pageHeight)
                {

                    e.HasMorePages = true;
                    offsetY = 0;
                    return;
                }
                else
                {
                    e.HasMorePages = false;

                }
            }

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
  • Uh.. este bucle: for (int i = 0; i < 100; i++ )? Tal vez porque tiene estáticamente conjunto de bucle de 100 veces.
  • Tu me variable debe ser declarada fuera de la PrintPage alcance. El uso de la BeginPrint evento para establecer a 0. Ahora usted tendrá que salir de su bucle cuando llega a la parte inferior de la página.
InformationsquelleAutor Nanthan | 2014-07-03

1 Kommentar

  1. 2

    Siempre que se establece e.HasMorePages = true, se acaba de fuego el printDocument1_PrintPage() controlador de eventos de nuevo. Usted necesita para mantener una variable de clase para el yo, para que no se reinicie a 0 cada vez que la siguiente página se imprime. No se declara localmente en el controlador de eventos.

    private class MyPrinter
    {
        private int i = 0;
    
        private void Print()
        {
            i = 0;
            printDocument1.Print();
        }
    
        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
             .....
             .....
             .....
    
             while (i < 100)
            {
                 graphic.DrawString("Line: " + i, font, brush, startX, startY + offsetY);
                 offsetY += (int)fontHeight;
    
                   if (offsetY >= pageHeight)
                    {
    
                        e.HasMorePages = true;
                        offsetY = 0;
                        return;
                    }
                    else
                    {
                        e.HasMorePages = false;
    
                    }
                i = i + 1;
            }
        }
    }
    • gracias Mangist! ahora múltiples documento puede ser visto en printpreview cuando hago clic en el botón de impresión en papel en blanco sólo viene por favor me ayude
    • #región de impresión private void print_Click(object sender, EventArgs e) { if (este.printDialog1.ShowDialog() == DialogResult.OK) { this.printDocument1.PrinterSettings = este.printDialog1.PrinterSettings; este.printDocument1.Imprimir(); } } #endregion
    • Se le llama el método Print (), me escribió? Es necesario restablecer la variable i a 0 cada vez que se imprime el documento. Establezca un punto de interrupción en el gráfico.DrawString() de la línea y comprobar los valores de sus coordenadas X,Y y yo. Tal vez agregar una Depuración.WriteLine(«Línea» + i.ToString()») en algún lugar en el bucle demasiado.
    • OK, ahora me llama print (), ahora bien la impresión de botón imprimir, pero se muestra en la vista preliminar, pero no se puede imprimir y si hago clic en vista previa de impresión como segundo tiempo desaparecen
    • cada vez que me llaman print (), pero no cuando yo cambio i = 0 e.HasMorePages = falsa, el bucle no termina nunca, si (a esto.printPreviewDialog1 .ShowDialog() == DialogResult.OK) { this.printDocument1.PrinterSettings = este.printDialog1.PrinterSettings; este.Imprimir(); }
    • Quitar que i = 0 en el interior del bucle, en lugar de simplemente llame a Imprimir() cada vez que usted necesita para imprimir el documento. Aprender cómo utilizar los puntos de interrupción y comprobar los valores de las variables.
    • lo intenté, pero tan cansado de no ganar de todos modos gracias un montón si u puede resolver este problema me

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea