2012-05-15 22 views
6

Sto provando a fare un feed di modulo & saltare la pagina 1 durante la stampa, tuttavia con le righe di codice seguenti, non sono in grado di creare un feed di modulo.Form feed in C# printing

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 per stampare il contenuto della pagina. Sto usando il carattere di avanzamento della forma di "\ f" C#.

Qualche idea su come implementare/rendere questo modulo feed per funzionare?

PS: Ho anche provato questo:

// codice ASCII 12 - codice di controllo avanzamento pagina della stampante.

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

internamente C# converte che a "\ f", ma non ha fatto avanzamento pagina, chiunque abbia implementato "\ f", si prega di condividere i tuoi pensieri.

+0

Solo per curiosità, hai provato a cambiare il pennello in Nero? –

+0

No, ho provato anche con Black, non ha funzionato. – Sharpeye500

+0

Vedere [PrintDocument.PrintPage Event] (http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.printpage%28v=vs.100%29.aspx) trovato da [Avanzamento pagina utilizzo?] (http://bytes.com/topic/c-sharp/answers/274193-form-feed-usage). –

risposta

5

In .NET, la proprietà PrintPageEventArgs.HasMorePage deve essere utilizzata per inviare un feed del modulo alla stampante. Chiamando e.Graphics.DrawString ("\ f", sFont, sBrush, 0, 0), si esegue semplicemente il rendering del testo sul documento da stampare, che non verrà mai interpretato dalla stampante come un avanzamento del modulo.

Poiché si sa dove si desidera interrompere la pagina, anziché chiamare il metodo InserPageBreak, impostare PrintPageEventArgs.HasMorePages = true all'interno del gestore di eventi di PrintPage. Ciò invierà un form feed alla stampante e l'evento PrintPage continuerà a essere attivato fino a quando non si imposta HasMorePages = false.

Spero che questo aiuti. Potrebbe essere utile vedere come hai implementato il tuo gestore di eventi PrintPage.

Esempio:

utilizzare il gestore BeginPrint per inizializzare i dati prima di stampare

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(); 
    } 

Nel gestore PrintPage, stampare una singola pagina alla volta, e impostare HasMorePages per indicare se v'è un altro pagina da stampare. In questo esempio, verranno stampate tre pagine, una stringa su ciascuna pagina. Dopo la terza pagina, _pageEnumerator.MoveNext() restituirà false, terminando il lavoro di stampa.

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 Picchiami sopra di circa 30 secondi. –

+0

Grazie. Ho provato a impostare PrintPageEventArgs.HasMorePages = true; Non ha fatto un feed di moduli. Avete qualche esempio/esempio rapido da mostrare? – Sharpeye500

+1

Ho aggiunto un breve campione. L'ho provato prima di postare e stampa 3 pagine separate. – figabytes