0

C#ウィンドウアプリケーションでは、ドキュメントが複数ページになると印刷に問題が発生します。ドキュメントを印刷するために使用している次のコードを参照してください。小さなドキュメント、つまり1ページしかありません。

印刷ボタンのクリックイベント時

    private void button1_Click(object sender, EventArgs e)
    {
        PrintDialog pd = new PrintDialog();
        PrintDocument doc = new PrintDocument();
        pd.Document = doc;
        doc.PrintPage += new PrintPageEventHandler(doc_PrintPage);
        DialogResult res = pd.ShowDialog();
        if (res == System.Windows.Forms.DialogResult.OK)
        {
            doc.Print();
        }
    }

また、PrintPageEventHandler は次のとおりです。

    void doc_PrintPage(object sender, PrintPageEventArgs e)
    {
    //Fetching data from DB

        BillingApplicationEntities ent = new BillingApplicationEntities();
        List<tbCustBill> BillData = ent.tbCustBills.Where(s => s.BillId == 20133).ToList();

   //Printing doc

        Graphics grp = e.Graphics;

        Font fnt = new Font("Courier New", 12);
        float fontH = fnt.GetHeight();

        int startX = 10;
        int StartY = 10;
        int offset = 40;
        foreach (tbCustWorkDet d in WorkData)
        {
            string Pare = d.WorkName.PadRight(30);
            string pp = string.Format("{0:c}", d.Price).PadRight(30);

            string pl = Pare + pp;

            grp.DrawString(pl, fnt, new SolidBrush(Color.Black), startX, StartY + offset);

            offset += (int)fontH + 5;
           if (offsetY >= pageHeight)
           {
                e.HasMorePages = true;
                offsetY = 0;
                return; // you need to return, then it will go into this function again
           }
           else {
                 e.HasMorePages = false;
            }
        }
        offset += 20;
        // And cont with other data to print
    }

このメソッドは正常に機能し、必要な o/p が得られますが、データが大きくなり、印刷するページがさらに必要になると、o/p では 1 ページしか得られません。

複数のページの場合、次のプロパティをtrueに設定する必要があると思います

    e.HasMorePages = true;

しかし、私はこの値をどこにどのように配置するのかわかりません...

要するに、上記のコードから複数のドキュメントを印刷する方法を知りたいですか?

このコードreturnでは、関数に戻り、実行全体が再び開始され、これが無限ループになります。この問題を防ぐ方法を教えてください。

4

1 に答える 1

1

e.HasMorePages = true;印刷するページがさらにある場合は、printpageハンドラーを追加します。これにより、ハンドラーが再度呼び出されます。適切なページを出力するのはハンドラー次第です。

于 2013-01-29T06:55:51.240 に答える