2

そこで、いくつかのテスト結果情報を格納するクラスと、その情報をユーザーに表示するコントロールを作成しました。このクラスに印刷機能を配置して、コントロールをページ全体のサイズで描画して印刷したいと考えています。ただし、常に空白になります。他のタイプの値である可能性があるため、コードはパネルをコントロールとして認識します。私が見逃している単純なものがあるに違いないと思います。

void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
        System.Drawing.Size oldSize = printData.Size;

        printData.Size = new System.Drawing.Size(e.MarginBounds.Width, e.MarginBounds.Height);
        System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(printData.Size.Width, printData.Size.Height);

        InvertZOrderOfControls(printData.Controls);
        printData.DrawToBitmap(bitmap, new System.Drawing.Rectangle(0, 0, printData.Size.Width, printData.Size.Height));
        InvertZOrderOfControls(printData.Controls);

        e.Graphics.DrawImage(bitmap, e.MarginBounds.Location);
        bitmap.Save(@"C:\Users\jdudley\Documents\File.bmp");
        printData.Size = oldSize;
    }

このスレッドのこのアドバイスに従って、コントロールの Z オーダーを逆にしましたが、何も変わりませんでした。保存呼び出しがデバッグ用に追加されました。コントロールなしでパネルの背景色を実際にレンダリングしているように見えます。

編集:これは印刷の文脈にありますが、私はこれまで印刷に問題はありませんでした. 私のエラーは、ビットマップの作成にあります。追加した保存行は、空のビットマップ ファイルを作成するため、これを証明しています。

4

1 に答える 1

2

イベント全体をこれに変更します

    void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
        System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(printData.Width, printData.Height);
        printData.DrawToBitmap(bitmap, new System.Drawing.Rectangle(new Point(0, 0), printData.Size));
        e.Graphics.DrawImage(bitmap, e.MarginBounds.Location);
    }

編集

これが私のプロジェクト全体です。printData という名前のパネルを作成し、2 つのボタンを追加し、イベントを button1 にアタッチしました。

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
    PrintDocument printDocument = new PrintDocument();
    public Form1()
    {
        InitializeComponent();
        pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
    }

    void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
        System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(printData.Width, printData.Height);
        printData.DrawToBitmap(bitmap, new System.Drawing.Rectangle(new Point(0, 0), printData.Size));
        e.Graphics.DrawImage(bitmap, e.MarginBounds.Location);
    }


    private void button1_Click(object sender, EventArgs e)
    {
        pd.Print();
    }
}
}

これを試してみないと、今夜は眠れません!!

于 2012-06-13T14:28:40.883 に答える