2012-05-15 33 views
6

Estoy tratando de hacer una alimentación de formulario & omita 1 página durante la impresión, sin embargo, con las siguientes líneas de código, no puedo hacer una alimentación de formulario.Alimentación de formulario en impresión C#

private void InserPageBreak(System.Drawing.Printing.PrintPageEventArgs e) 
{ 
     Font sFont = new Font("Arial", 10); 
     Brush sBrush = Brushes.White; 
     e.Graphics.DrawString("\f", sFont, sBrush, 0, 0); 
} 

Uso PrintDialog para imprimir los contenidos de la página. Estoy usando el carácter de alimentación de formulario "\ f" C#.

¿Alguna idea sobre cómo implementar/hacer que este formulario avance para funcionar?

PD: incluso intentado esto:

// código ASCII 12 - código de control de avance de página de la impresora.

string test = char.ConvertFromUtf32(12); 
e.Graphics.DrawString(test, sFont, sBrush, 0, 0); 

internamente C# convierte eso a "\ f", pero no lo salto de página, cualquiera que haya implementado "\ f", por favor, comparta sus pensamientos.

+0

Solo por curiosidad, ¿ha intentado cambiar el pincel a Negro? –

+0

No, lo intenté con Black también, no funcionó. – Sharpeye500

+0

Consulte [PrintDocument.PrintPage Event] (http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.printpage%28v=vs.100%29.aspx) que se encuentra en [Feed de formulario uso?] (http://bytes.com/topic/c-sharp/answers/274193-form-feed-usage). –

Respuesta

5

En .NET, la propiedad PrintPageEventArgs.HasMorePage se debe utilizar para enviar un formulario a la impresora. Al llamar a e.Graphics.DrawString ("\ f", sFont, sBrush, 0, 0), simplemente está procesando texto en el documento que se va a imprimir, que nunca será interpretado por la impresora como avance de formulario.

Dado que sabe dónde quiere ir a la página, en lugar de llamar a su método InserPageBreak, establezca PrintPageEventArgs.HasMorePages = true dentro del controlador de eventos de PrintPage. Esto enviará un formulario a la impresora y su evento PrintPage continuará encendiéndose hasta que establezca HasMorePages = false.

Espero que esto ayude. Puede ser útil ver cómo ha implementado su controlador de eventos PrintPage.

Ejemplo:

utilizar el controlador BeginPrint para inicializar los datos antes de imprimir

void _document_BeginPrint(object sender, PrintEventArgs e) 
    { 
     //generate some dummy strings to print 
     _pageData = new List<string>() 
       { 
        "Page 1 Data", 
        "Page 2 Data", 
        "Page 3 Data", 
       }; 

     // get enumerator for dummy strings 
     _pageEnumerator = _pageData.GetEnumerator(); 

     //position to first string to print (i.e. first page) 
     _pageEnumerator.MoveNext(); 
    } 

En el controlador de PrintPage, imprimir una sola página a la vez, y establecer HasMorePages para indicar si hay o no otra página para imprimir. En este ejemplo, se imprimirán tres páginas, una cadena en cada página. Después de la 3ª página, _pageEnumerator.MoveNext() devolverá false, finalizando el trabajo de impresión.

void _document_PrintPage(object sender, PrintPageEventArgs e) 
    { 
     Font sFont = new Font("Arial", 10); 
     Brush sBrush = Brushes.Black; 

     //print current page 
     e.Graphics.DrawString(_pageEnumerator.Current, sFont, sBrush, 10, 10); 

     // advance enumerator to determine if we have more pages. 
     e.HasMorePages = _pageEnumerator.MoveNext(); 
    } 
+0

+1 Me golpeó por unos 30 segundos. –

+0

Gracias. Traté de establecer PrintPageEventArgs.HasMorePages = true; No hizo un feed de formulario. ¿Alguna muestra rápida/ejemplo para mostrar? – Sharpeye500

+1

Agregué una muestra corta. Lo probé antes de publicarlo y imprime 3 páginas separadas. – figabytes