【问题标题】:How to print a winforms usercontrol如何打印一个winforms用户控件
【发布时间】:2016-01-20 04:49:27
【问题描述】:

我创建了一个 winforms 用户控件,在 OnPaint 事件中进行了大量自定义绘画。现在我想打印这个控件。

  • 是否有一种所见即所得的方法来将此控件放置在“文档”上并打印包含用户控件的文档?

  • 当使用打印文档的 printpage() 事件时,我可以在“页面”上动态创建和定位我的用户控件并以某种方式调用我的用户控件的绘制方法吗?

【问题讨论】:

  • 它是 wpf/xaml 用户控件吗?
  • 周围有很多报表设计器产品,但对您的用户控件一无所知。简单的方法是公开一个采用 Graphics 对象的方法,将您的绘画代码移动到该方法中。现在您可以从您的 OnPaint() 方法 您的 PrintPage 事件处理程序调用它,同时在两者中传递 e.Graphics。在 PrintPage 事件处理程序中使用 Graphics.TranslateTransform() 将其移动到页面上所需的任何位置。如果您需要更大或更小,也许可以使用 ScaleTransform()。
  • 好的,谢谢汉斯,这就是我的计划。我只是希望某种能够处理用户控件的框架/打印引擎

标签: c# printing user-controls


【解决方案1】:

在 PrintPage 事件中获取控件的图像,并将其绘制到打印机图形上。

private void PrintPageEventHandler(object sender, PrintPageEventArgs ev) {
            Rectangle rect = new Rectangle(0, 0, yourControl.Width, yourControl.Height);

            //aquire image of yourControl
            Bitmap bitmap = new Bitmap(yourControl.Width, yourControl.Height);     
            yourControl.DrawToBitmap(bitmap, rect);

            ev.Graphics.DrawImage(bitmap, new Point(0, 0)); //place image on right position istead of (0, 0)

}

【讨论】:

  • 永远不要永远这样做,打印机的分辨率比屏幕高得多。位图中的那些像素会变成纸上的 6x6 墨点。只有当你的手臂变长时才会看起来不错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-09
  • 2012-03-27
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
相关资源
最近更新 更多