2012-05-15 28 views
6

フォームフィードをしようとしています&印刷中に1ページをスキップしますが、以下のコード行ではフォームフィードを作成できません。フォームフィードの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); 
} 

私はPrintDialogを使ってページの内容を印刷します。私は "\ f" C#のフォームフィード文字を使用しています。

このフォームフィードを実装/作成する方法についてのご意見はありますか?

PS:私も試してみましたこの:

// ASCIIコード12 - プリンタのフォームフィード制御コード。

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

内部のC#は、「\のF」のことを変換しますが、フォームフィードをしませんでした、「\ Fを」実施している誰もが、自分の考えを共有してください。

+0

ブラシをブラックに変更しようとしましたか? –

+0

いいえ、私も黒で試して、うまくいきませんでした。 – Sharpeye500

+0

「[PrintDocument.PrintPageイベント]」(http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.printpage%28v=vs.100%29.aspx)の[フォームフィード使用法?](http://bytes.com/topic/c-sharp/answers/274193-form-feed-usage)。 –

答えて

5

.NETでは、PrintPageEventArgs.HasMorePageプロパティを使用して、フォームフィードをプリンタに送信する必要があります。 e.Graphics.DrawString( "\ f"、sFont、sBrush、0、0)を呼び出すことで、印刷する文書にテキストをレンダリングするだけで、プリンタがフォームフィードとして解釈することはありません。

InserPageBreakメソッドを呼び出す代わりに、ページを中断する場所を知っているので、PrintPageイベントハンドラ内でPrintPageEventArgs.HasMorePages = trueを設定します。これにより、フォームフィードがプリンタに送信され、HasMorePages = falseに設定するまで、PrintPageイベントは引き続き発生します。

こちらがお役に立てば幸いです。 PrintPageイベントハンドラの実装方法を確認すると便利です。

例:

は、PrintPageハンドラーで

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

を印刷する前にデータを初期化時に、単一のページを印刷し、別のがあるかどうかを示すためにHasMorePagesを設定するBeginPrintハンドラを使用します印刷するページ。この例では、各ページに1つの文字列が3ページ印刷されます。 3ページ目の後、_pageEnumerator.MoveNext()はfalseを返し、印刷ジョブを終了します。

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約30秒で私にそれを打つ。 –

+0

ありがとうございます。私はPrintPageEventArgs.HasMorePages = trueを設定しようとしました。それはフォームフィードをしませんでした。 クイックサンプル/サンプルを表示しますか? – Sharpeye500

+1

私は短いサンプルを追加しました。私は投稿する前にそれをテストし、それは3つの別々のページを印刷します。 – figabytes