如何打印包含多个页面的完整表单?
本文关键字:表单 何打印 打印 包含多 | 更新日期: 2023-09-27 18:05:33
我有一个很长的表单需要打印。表单本身可以比屏幕上显示的内容大(在将数据加载到表单中之前,高度是未知的)。我试过几种方法,但都不奏效。
下面是最接近我想要完成的方法。下面方法的问题是,它只打印屏幕的一部分。我也不确定它是否捕获了完整的表单,或者只是用户屏幕上可见的内容。
private void print_Click(object sender, EventArgs e)
{
PrintScreen();
DialogResult result = printDialog1.ShowDialog();
if (result == DialogResult.OK)
{
printDocument1.Print();
}
}
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
public static extern long BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);
private void PrintScreen()
{
Graphics mygraphics = this.CreateGraphics();
Size s = this.Size;
memoryImage = new Bitmap(s.Width, s.Height, mygraphics);
Graphics memoryGraphics = Graphics.FromImage(memoryImage);
IntPtr dc1 = mygraphics.GetHdc();
IntPtr dc2 = memoryGraphics.GetHdc();
BitBlt(dc2, 0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height, dc1, 0, 0, 13369376);
mygraphics.ReleaseHdc(dc1);
memoryGraphics.ReleaseHdc(dc2);
}
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawImage(memoryImage, 0, 0);
}
请帮。
如果您试图将WinForm的内容打印到打印机上,那么将UI控件绘制到打印机上将无法工作。你不能像调整屏幕一样调整或滚动一张纸的大小。你会发现在屏幕上看起来不错的东西在纸上看起来并不好;字体像素化,渐变抖动,文本被截断,在屏幕上看起来不错的布局会在纸上打印到疯狂的位置。
你需要使用System.Drawing.Printing类来决定打印机的参数,比如页面大小、颜色、页边距等等。然后,将输出分成适合页面的文本段落或图形块。如果一个段落或平铺在一个页面上,决定如何分割它,并在多个页面上打印一个部分。PrintDocument文档有一个在多个页面上打印的示例。
除了最简单的输出,这将是大量的工作。您最好使用像Report Viewer或nReports这样的报表引擎来生成PDF或RDL输出并将其发送到打印机。