2012-05-15 6 views
6

Próbuję wykonać przesuwanie formularza & pomiń 1 stronę podczas drukowania, ale z poniższymi liniami kodu nie mogę utworzyć pliku danych.Zasilanie formularzy przy drukowaniu 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); 
} 

Używam PrintDialog do drukowania zawartości strony. Używam znaku postaci formularza "\ f" C#.

Wszelkie uwagi na temat tego, jak zaimplementować ten formularz lub sprawić, by ten formularz działał?

PS: Próbowałem nawet to:

// kod ASCII 12 - kod forma kontrola pasz drukarki.

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

wewnętrznie C# konwertuje które do "\ f", ale nie tworzą kanał, kto wdrożyła "\ F", proszę podzielić się swoimi przemyśleniami.

+0

Tylko z ciekawości, czy próbowałeś zmienić pędzel na czarny? –

+0

Nie, próbowałem także z Black, nie działa. – Sharpeye500

+0

Zobacz [Zdarzenie PrintDocument.PrintPage] (http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.printpage%28v=vs.100%29.aspx) znalezione w [Kanał formularza użycie?] (http://bytes.com/topic/c-sharp/answers/274193-form-feed-usage). –

Odpowiedz

5

W .NET należy użyć właściwości PrintPageEventArgs.HasMorePage do wysłania materiału do drukarki. Przez wywołanie e.Graphics.DrawString ("\ f", sFont, sBrush, 0, 0), po prostu renderujesz tekst do dokumentu, który ma zostać wydrukowany, który nigdy nie zostanie zinterpretowany przez drukarkę jako plik danych.

Ponieważ wiesz, gdzie chcesz przerwać stronę, zamiast wywoływać metodę InserPageBreak, ustaw PrintPageEventArgs.HasMorePages = true w module obsługi zdarzeń PrintPage. To spowoduje wysłanie formularza do drukarki, a Twoje zdarzenie PrintPage będzie nadal uruchamiane, dopóki nie ustawisz HasMorePages = false.

Mam nadzieję, że to pomoże. Przydatne może być zobaczenie, w jaki sposób zaimplementowano procedurę obsługi zdarzeń PrintPage.

Przykład:

Użyj obsługi BeginPrint zainicjować danych przed drukowaniem

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

W obsługi printpage, wydrukować jedną stronę na raz i ustawić HasMorePages aby wskazać, czy istnieje inna strona do wydrukowania. W tym przykładzie wydrukowane zostaną trzy strony, po jednym na każdej stronie. Po trzeciej stronie, _pageEnumerator.MoveNext() zwróci false, kończąc zadanie drukowania.

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 Pokonaj mnie przez około 30 sekund. –

+0

Dzięki. Próbowałem ustawić PrintPageEventArgs.HasMorePages = true; Nie wykonano podawania formularza. Czy masz jakąś szybką próbkę/przykład do pokazania? – Sharpeye500

+1

Dodałem krótką próbkę. Przetestowałem to przed wysłaniem i wydrukowałem 3 oddzielne strony. – figabytes

Powiązane problemy