none
How to print windows form in C# application

    Question

  • Dear All,
     I have application,that having one windwos form.on form some images are drawn, I want to print that form on one button click event.
    Please help me that code writing.without crystal report and print preview option.

    I want to without PrintScreen, windows form printing...

    Thanks,

    Rajesh.

    Monday, July 13, 2009 10:05 AM

Answers

  • You are a little lazy, man :)

    You just have to print the resulting image.

    Like this:
    protected void btnPrint_Click(object sender, EventArgs e)
    {
    	PrintDocument pd = new PrintDocument();
    	pd.PrintPage += new PrintPageEventHandler(PrintImage);
    	pd.Print();      
    }
    
    void PrintImage(object o, PrintPageEventArgs e)
    {
    	int x = SystemInformation.WorkingArea.X;
    	int y = SystemInformation.WorkingArea.Y;
    	int width = this.Width;
    	int height = this.Height; 
    
    	Rectangle bounds = new Rectangle(x, y, width, height); 
    
    	Bitmap img = new Bitmap(width, height); 
    
    	this.DrawToBitmap(img, bounds);
    	Point p = new Point(100, 100);
    	e.Graphics.DrawImage(img, p);    
     }


    Best regards, Sergiu
    • Proposed as answer by Sergiu Dudnic Wednesday, July 15, 2009 11:48 AM
    • Unproposed as answer by RajeshKardile Thursday, July 16, 2009 4:53 AM
    • Marked as answer by RajeshKardile Thursday, July 16, 2009 4:53 AM
    Wednesday, July 15, 2009 10:41 AM

All replies

  •             Bitmap bitmap = new Bitmap(this.Width, this.Height);
                this.DrawToBitmap(bitmap, this.ClientRectangle);
                bitmap.Save("myPrintScreen.bmp");
    
    this code works on a Windows.Forms-
    Best regards, Sergiu
    Monday, July 13, 2009 10:36 AM
  • Hi - I think my information can help.

    Well, Sergiu is almost correct, his code will capture the Windows Form application UI.
    It will also save it.

    http://plpfzq.blu.livefilestore.com/y1pcHFSWCNK_hObUCsnf3qTQvb1COasIRaABo_JB4x8GQSb1F6ONMHYsK4QVCGxNuKJNw7_zeo6GHfl0GYcGj6mY_WTziwMPKwY/test.jpg
    Figure A: Using the Sergiu's code example.

    ==========================================================
    try
    {
          int x = SystemInformation.WorkingArea.X;
          int y = SystemInformation.WorkingArea.Y;

          int
    width = this.Width;
          int height = this.Height;

     

          Rectangle bounds = new Rectangle(x, y, width, height);

     

          Bitmap img = new Bitmap(width, height);

     

          this.DrawToBitmap(img, bounds);
          string date = DateTime.Now.ToString("Mdyyyy");
          img.Save(date +
    ".bmp");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message.ToString());
    }

    ==========================================================

    Here are the results using my above code example:

    http://plpfzq.blu.livefilestore.com/y1pIa_I5FZYEKXoE2GatkCJ4jbKtA4VQb3qx91zUxbAxpW5iY2Myq-BnZcAILq1CIX7PgHNLqSmNIYkG1157KP1cQ/7132009.jpg
    Figure B: It will capture the entire form, all form bounds.

    I hope this information was helpful....

    Have a nice day...

    Best regards,
    Fisnik


    Coder24.com
    Monday, July 13, 2009 1:33 PM
  • But how can i print that img, on button click event without showing user
    Tuesday, July 14, 2009 6:09 AM
  • Hi again:

    It will never be shown to the user.

    What do you mean by that?

    I mean the file is getting saved in a directory.

    Have a nice day...

    Best regards,
    Fisnik
    Coder24.com
    Tuesday, July 14, 2009 7:13 AM
  • Hi
      I have form that having print button, if user click button that time print command will fire.
    so please give me that code.

    thanks
    Rajesh
    Tuesday, July 14, 2009 7:18 AM
  • Check out my replay, the earlier one.

    That one with screenshots.

    Have a nice day...

    Best regards,
    Fisnik
    Coder24.com
    Tuesday, July 14, 2009 7:20 AM
  • Hi,

    this is the code-snippet:
    ===============================================================
    try
    {
          int x = SystemInformation
    .WorkingArea.X;
          int y = SystemInformation
    .WorkingArea.Y;
           int width = this.Width;
          int height = this
    .Height; 

         Rectangle
    bounds = new Rectangle
    (x, y, width, height); 

         Bitmap
    img = new Bitmap
    (width, height); 

           this
    .DrawToBitmap(img, bounds);
          string date = DateTime.Now.ToString("Mdyyyy"
    );
          img.Save(date +
    ".bmp"
    );
    }
    catch (Exception
    ex)
    {
        MessageBox
    .Show(ex.Message.ToString());
    }

    ===============================================================

    Have a nice day...

    Best regards,
    Fisnik


    Coder24.com
    • Proposed as answer by Ramans444 Saturday, October 13, 2012 12:01 PM
    • Unproposed as answer by Ramans444 Saturday, October 13, 2012 12:01 PM
    Tuesday, July 14, 2009 7:40 AM
  • You are a little lazy, man :)

    You just have to print the resulting image.

    Like this:
    protected void btnPrint_Click(object sender, EventArgs e)
    {
    	PrintDocument pd = new PrintDocument();
    	pd.PrintPage += new PrintPageEventHandler(PrintImage);
    	pd.Print();      
    }
    
    void PrintImage(object o, PrintPageEventArgs e)
    {
    	int x = SystemInformation.WorkingArea.X;
    	int y = SystemInformation.WorkingArea.Y;
    	int width = this.Width;
    	int height = this.Height; 
    
    	Rectangle bounds = new Rectangle(x, y, width, height); 
    
    	Bitmap img = new Bitmap(width, height); 
    
    	this.DrawToBitmap(img, bounds);
    	Point p = new Point(100, 100);
    	e.Graphics.DrawImage(img, p);    
     }


    Best regards, Sergiu
    • Proposed as answer by Sergiu Dudnic Wednesday, July 15, 2009 11:48 AM
    • Unproposed as answer by RajeshKardile Thursday, July 16, 2009 4:53 AM
    • Marked as answer by RajeshKardile Thursday, July 16, 2009 4:53 AM
    Wednesday, July 15, 2009 10:41 AM
  • Hello Sir,

    I try this, showing me this error, it might be some another problem but if you can help....

    Error 1 Unable to copy file "obj\Debug\AdityaConsultants.exe" to "bin\Debug\AdityaConsultants.exe". The process cannot access the file 'bin\Debug\AdityaConsultants.exe' because it is being used by another process. WindowsApplication1

    Thanks
    Anas

    Wednesday, September 01, 2010 12:42 PM
  • using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing.Imaging;
    using System.IO;
    using System.Drawing.Printing;
    using System.Runtime.InteropServices;

    namespace fro
    {
    public partial class print : Form
    {
    private System.IO.Stream streamToPrint;
    string streamType;
    [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
    private static extern bool BitBlt
    (
    IntPtr hdcDest,
    int nXDest,
    int nYDest,
    int nWidth,
    int nHeights,
    IntPtr hdcSrc,
    int nXSrc,
    int nYSrc,
    System.Int32 dwRop
    );

    public print()
    {
    InitializeComponent();
    printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);
    }







    private void printDocument1_PrintPage(System.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);
    }


    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();

    }

    }

    private void print_Load(object sender, EventArgs e)
    {
    this.Load += new System.EventHandler(this.print_Load);
    }

    private void button1_Click(object sender, EventArgs e)
    {
    MessageBox.Show("errr");
    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(@"C:\PrintPage.jpg", ImageFormat.Jpeg);
    FileStream filestream = new FileStream(@"C:\PrintPage.jpg", FileMode.Open, FileAccess.Read);
    StartPrint(filestream, "Image");
    if (System.IO.File.Exists(@"c:\PrintPage.jpg"))
    {
    System.IO.File.Delete(@"C:\PrintPage.jpg");
    }
    else
    MessageBox.Show("errr");
    }

    private void InitializeComponent()
    {
    this.printDocument1 = new System.Drawing.Printing.PrintDocument();
    this.SuspendLayout();
    // //
    // // Form1
    // //
    this.ClientSize = new System.Drawing.Size(292, 266);
    this.Name = "print";
    this.Load += new System.EventHandler(this.print_Load);
    this.ResumeLayout(false);

    }


    }


    }
    Thursday, September 09, 2010 10:08 AM
  • Your code function, but you have open this file with an other application. Close this application and try again. That will be good

    Clémox

    Monday, September 26, 2011 5:43 PM
  • Hi Fisnik,

    Just wondering where it is the image saves itself?

     

    Kind Regards

    Sam Mines


    Sam Mines
    Wednesday, January 04, 2012 10:50 AM
  • can u rotate the image in landscape mode while printing

    because my image size is 950*665

    Saturday, October 13, 2012 12:09 PM