How to print windows form in C# application
-
Monday, July 13, 2009 10:05 AM
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.
- Edited by RajeshKardile Monday, July 13, 2009 10:24 AM
- Edited by RajeshKardile Monday, July 13, 2009 10:39 AM
All Replies
-
Monday, July 13, 2009 10:36 AM
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 1:33 PM
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.
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:
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- Proposed As Answer by Eric Da Programmer Tuesday, July 14, 2009 4:31 PM
-
Tuesday, July 14, 2009 6:09 AMBut how can i print that img, on button click event without showing user
-
Tuesday, July 14, 2009 7:13 AMHi 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:18 AMHi
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:20 AMCheck out my replay, the earlier one.
That one with screenshots.
Have a nice day...
Best regards,
Fisnik
Coder24.com -
Tuesday, July 14, 2009 7:40 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 -
Wednesday, July 15, 2009 10:41 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, September 01, 2010 12:42 PMHello 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
ThanksAnas
-
Thursday, September 09, 2010 10:08 AMusing 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);
}
}
} -
Monday, September 26, 2011 5:43 PM
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
-
Wednesday, January 04, 2012 10:50 AM
Hi Fisnik,
Just wondering where it is the image saves itself?
Kind Regards
Sam Mines
Sam Mines -
Saturday, October 13, 2012 12:09 PM
can u rotate the image in landscape mode while printing
because my image size is 950*665

