1

これは私のコードであり、1ページを印刷すると正常に機能しますが、1ページに収まらないものを印刷しようとすると、新しいページが開始されず、オフセットの変更を受け入れて最初のページに書き込みを開始します。 。

誰かが何をすべきか知っていますか?

private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
    Graphics graphic = e.Graphics;

    Font font = new Font("Courier New", 12);
    float fontHeight = font.GetHeight();
    int startX = 10;
    int startY = 10;
    int offset = 0;

    float pageWidth = e.PageSettings.PrintableArea.Width;
    float pageHeight = e.PageSettings.PrintableArea.Height;

    foreach (string line in textRichTextBox.Lines)
    {
        graphic.DrawString(line, font, new SolidBrush(Color.Black), startX, startY + offset);
        offset += (int)fontHeight;// + 5

        if (offset >= pageHeight - (int)fontHeight)
        {
            e.HasMorePages = true;
            offset = 0;
        }
    }
    e.HasMorePages = false;
}
4

2 に答える 2

1

API を間違って使用しています。ドキュメントには次のように書かれています。

PrintPage イベント ハンドラーで、PrintPageEventArgs クラスの Graphics プロパティとドキュメント コンテンツを使用して、行の長さとページあたりの行数を計算します。各ページが描画された後、それが最後のページかどうかを確認し、それに応じて PrintPageEventArgs の HasMorePages プロパティを設定します。PrintPage イベントは、HasMorePages が false になるまで発生します。また、PrintPage イベントがそのイベント処理メソッドに関連付けられていることを確認してください。

HasMorePagesコールバックの終了時にのみ、ループで設定することはできません。HasMorePagesfalseに設定するまで、コールバックが呼び出されます

于 2013-02-06T16:57:44.333 に答える