繁体   English   中英

如何使用打印预览打印分组框?

[英]How to print a group box using print preview?

在此处输入图片说明

下面的代码在打印预览中向我显示了组框的一半:

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) {
  //  Bitmap bmp = new Bitmap(groupBox1.ClientRectangle.Width, groupBox1.ClientRectangle.Height);
  //  groupBox1.DrawToBitmap(bmp, groupBox1.ClientRectangle);
  //  e.Graphics.DrawImage(bmp, 0, 0);

  Bitmap bmp = new Bitmap(groupBox1.Width, groupBox1.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
  groupBox1.DrawToBitmap(bmp, new Rectangle(0, 0, groupBox1.Width, groupBox1.Height));
  e.Graphics.DrawImage((Image) bmp, 0, 0);
}

private void button1_Click(object sender, EventArgs e) {
  PrintPreviewDialog ppd = new PrintPreviewDialog();
  PrintDocument Pd = new PrintDocument();

  Pd.PrintPage += this.printDocument1_PrintPage;
  ppd.Document = Pd;
  ppd.ShowDialog();
}

您需要在页面边界内绘制。

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    var g = e.Graphics;
    var srcRect = new Rectangle(0, 0, groupBox1.Width, groupBox1.Height);
    var desRect = new Rectangle(e.PageBounds.X, e.PageBounds.Y, e.PageBounds.Width, srcRect.Height);
    //Or to draw within the margin
    //var desRect = new Rectangle(e.MarginBounds.X, e.MarginBounds.Y, e.MarginBounds.Width, srcRect.Height);

    using (var bmp = new Bitmap(srcRect.Width, srcRect.Height))
    {
        groupBox1.DrawToBitmap(bmp, srcRect);
        g.DrawImage(bmp, desRect, srcRect, GraphicsUnit.Pixel);
    }
}

此外,创建PrintDocument对象并在 Form 的构造函数或Load事件中注册其PrintPage事件,以避免在button1_Click事件中一次又一次地重复。 并且不要忘记处理一次性物品。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM