如何打印win form的全部内容c#

时间:2017-03-14 11:26:22

标签: c# .net winforms developer-tools

我赢了表格,我想打印全部内容。 目前,使用仅打印显示的部分的代码,而不是打印下面的全部内容。 我检查了谷歌,但没有找到任何具体的主题。 你可以优化这段代码来打印页面的全部内容吗? 奇怪的是,内容来半页说,有半页要填充剩下的内容 Here is screenshot: enter image description here

private System.IO.Stream streamToPrint;

string streamType;

[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
private static extern bool BitBlt
(
    IntPtr hdcDest, // handle to destination DC
    int nXDest, // x-coord of destination upper-left corner
    int nYDest, // y-coord of destination upper-left corner
    int nWidth, // width of destination rectangle
    int nHeight, // height of destination rectangle
    IntPtr hdcSrc, // handle to source DC
    int nXSrc, // x-coordinate of source upper-left corner
    int nYSrc, // y-coordinate of source upper-left corner
    System.Int32 dwRop // raster operation code
);

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    System.Drawing.Image image = System.Drawing.Image.FromStream(this.streamToPrint);

    int x = e.MarginBounds.X;
    int y = e.MarginBounds.Y;

    int width = image.Width;
    int height = image.Height;
    if ((width / e.MarginBounds.Width) > (height / e.MarginBounds.Height))
    {
        width = e.MarginBounds.Width;
        height = image.Height * e.MarginBounds.Width / image.Width;
    }
    else
    {
        height = e.MarginBounds.Height;
        width = image.Width * e.MarginBounds.Height / image.Height;
    }
    System.Drawing.Rectangle destRect = new System.Drawing.Rectangle(x, y, width, height);
    e.Graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, System.Drawing.GraphicsUnit.Pixel);
    }

    private void printButton_Click(object sender, EventArgs e)
    { 

        String filename = System.IO.Path.GetTempFileName();

        Graphics g1 = this.CreateGraphics();
        Image MyImage = new Bitmap(this.ClientRectangle.Width, this.ClientRectangle.Height, g1);
        Graphics g2 = Graphics.FromImage(MyImage);
        IntPtr dc1 = g1.GetHdc();
        IntPtr dc2 = g2.GetHdc();
        BitBlt(dc2, 0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height, dc1, 0, 0, 13369376);
        g1.ReleaseHdc(dc1);
        g2.ReleaseHdc(dc2);
        MyImage.Save(filename, ImageFormat.Png);
        FileStream fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read);
        StartPrint(fileStream, "Image");
        fileStream.Close();
        if (System.IO.File.Exists(filename))
        {
            System.IO.File.Delete(filename);
        }
    }


    private void printPreviewDialog1_Load(object sender, EventArgs e)
    {

    }

    public void StartPrint(Stream streamToPrint, string streamType)
    {

        this.printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);

        this.streamToPrint = streamToPrint;

        this.streamType = streamType;

        System.Windows.Forms.PrintDialog PrintDialog1 = new PrintDialog();

        PrintDialog1.AllowSomePages = true;
        PrintDialog1.ShowHelp = true;
        PrintDialog1.Document = printDocument1;
        DialogResult result = PrintDialog1.ShowDialog();
        if (result == DialogResult.OK)
        {
            printDocument1.Print();
        }
    }       
 }
}

0 个答案:

没有答案