6

フォームフィードを実行して印刷中に1ページスキップしようとしていますが、以下のコード行では、フォームフィードを作成できません。

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」を実装した人は、あなたの考えを共有してください。

4

1 に答える 1

5

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

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

これがお役に立てば幸いです。PrintPageイベントハンドラーをどのように実装したかを確認すると役立つ場合があります。

例:

印刷する前にBeginPrintハンドラーを使用してデータを初期化します

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

PrintPageハンドラーで、一度に1ページを印刷し、HasMorePagesを設定して、印刷する別のページがあるかどうかを示します。この例では、3ページが印刷され、各ページに1つの文字列が印刷されます。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();
    }
于 2012-05-16T15:49:18.730 に答える