如何使用c#在winform中打印多个页面中的面板控件的所有内容

时间:2016-06-19 11:47:18

标签: c# printing

我有一个winform应用程序,我想打印整个页面,如果只是一个页面,我已经能够打印页面。但我想打印所有内容,即使它超过1页。内容包含最多5页长的datagridview。所以我希望能够用图像datagridview文本等打印内容。提前感谢。

1 个答案:

答案 0 :(得分:0)

正确的答案是你没有。更确切地说,你不打印出一个控件。绘制一个控件,使其在屏幕上看起来很好,这比打印机的分辨率低得多。如果你只是将控件的屏幕外观转储到打印机上,你最终会得到一些非常丑陋的东西。这种屏幕转储"打印"在最好的情况下是一个黑客攻击,它肯定不会在专业应用程序中结束。

相反,您应该编写代码,将控件的内容呈现为PrintDocument,并且在一张纸上看起来令人愉悦。这使您可以更好地控制打印输出的外观,使您可以处理需要包装到多个页面的内容。而且因为您在打印机的全分辨率下进行绘图,所以它看起来不会模糊和像素化。

当然,这需要工作。打印是WinForms中比较困难的任务之一。该框架对您没有任何帮助。你必须为自己编写代码,因为只有你知道你的打印输出应该是什么样的。

因此,如果您不想做这项工作,那么您可以使用丑陋/懒惰的路径并使用控件的DrawToBitmap方法将其屏幕内容呈现为位图。然后将该位图发送到打印机。正如您所发现的那样,如果位图太大而无法放在单张纸上,会打破这种情况。因此,无论你摆动它,你都不会写出一些实际的代码。要从这里开始,您需要确定纸张上的可用空间,将其与控件位图的大小进行比较,并将位图划分为页面大小的部分。获得页面大小的部分后,将每个部分作为新页面的内容发送到打印机。您可以找到详细的讨论,包括示例代码,以便在多个页面here上打印图像。正如我所说,不同之处在于,不是从文件加载位图(如Fredrik的代码所示),而是使用通过调用DrawToBitmap获得的位图。

不要浪费太多时间来完成这项工作。该应用的第2版需要实现正确的,可扩展的打印支持。