如何打印包含多个页面的完整表单?

本文关键字:表单 何打印 打印 包含多 | 更新日期: 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输出并将其发送到打印机。