Display preview in C #

Right now, I'm trying to create my form on PrintDocument, but the only way to show where the material actually appears on the page is to print the document. It works, but I have a lot of things I need to add, and I would prefer not to spend a ton of paper. Right now I have a print dialog, but no print preview button. Is there a way to make me appear? Thanks!

public partial class Form4 : System.Windows.Forms.Form { private System.ComponentModel.Container components; private System.Windows.Forms.Button printButton; public Form4() { // The Windows Forms Designer requires the following call. InitializeComponent(); } // The Click event is raised when the user clicks the Print button. private void printButton_Click(object sender, EventArgs e) { PrintDocument pd = new PrintDocument(); pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPage); PrintDialog pdi = new PrintDialog(); pdi.Document = pd; if (pdi.ShowDialog() == DialogResult.OK) { pd.Print(); } } // The PrintPage event is raised for each page to be printed. private void pd_PrintPage(object sender, PrintPageEventArgs e) { Single yPos = 0; Single leftMargin = e.MarginBounds.Left; Single topMargin = e.MarginBounds.Top; Image img = Image.FromFile("logo.bmp"); Rectangle logo = new Rectangle(40, 40, 50, 50); using (Font printFont = new Font("Arial", 20.0f)) { e.Graphics.DrawImage(img, logo); e.Graphics.DrawString("Header", printFont, Brushes.Black, leftMargin, yPos, new StringFormat()); } using (SolidBrush blueBrush = new SolidBrush(Color.Black)) { Rectangle rect = new Rectangle(100, 100, 500, 120); e.Graphics.FillRectangle(blueBrush, rect); } } // The Windows Forms Designer requires the following procedure. private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.printButton = new System.Windows.Forms.Button(); this.ClientSize = new System.Drawing.Size(504, 381); this.Text = "Print Example"; printButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; printButton.Location = new System.Drawing.Point(32, 110); printButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat; printButton.TabIndex = 0; printButton.Text = "Print the file."; printButton.Size = new System.Drawing.Size(136, 40); printButton.Click += new System.EventHandler(printButton_Click); this.Controls.Add(printButton); } } 
+7
c # printing winforms printdocument
source share
3 answers

You can use PrintPreviewDialog for this:

 private void printButton_Click(object sender, EventArgs e) { PrintDocument pd = new PrintDocument(); pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPage); PrintDialog printdlg = new PrintDialog(); PrintPreviewDialog printPrvDlg = new PrintPreviewDialog(); // preview the assigned document or you can create a different previewButton for it printPrvDlg.Document = pd; printPrvDlg.ShowDialog(); // this shows the preview and then show the Printer Dlg below printdlg.Document = pd; if (printdlg.ShowDialog() == DialogResult.OK) { pd.Print(); } } 
+9
source share

If you want to have a separate button for previewing your document before printing, check out this How to call the PrintPreviewDialog window. You can ignore the file stream aspect.

It was useful for me, I hope it helps others.

0
source share

where is the implementation of "this.pd_PrintPage"? The above code gives an error there.

0
source share

All Articles