Printing picture box

16,072

Try this: somewhat simple:

Add the following code in the button click event:

PrintDocument printDocument1 = new PrintDocument();
printDocument1.PrintPage +=new PrintPageEventHandler(printDocument1_PrintPage);
printDocument1.Print();

Then the printDocument1_PrintPage event :

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    e.Graphics.DrawImage(pic.Image, 0, 0);
}

where pic is the picture box..

This prints the image in the picturebox.

Share:
16,072
alaa joma
Author by

alaa joma

Updated on June 14, 2022

Comments

  • alaa joma
    alaa joma almost 2 years

    When I try to print a PictureBox, an ArgumentException is thrown (parameter is not valid).

    This is the printing functions:

    void pdGroupBox_PrintPage(object sender, PrintPageEventArgs e)
    {
        foreach(Control control in _GbFrm.Controls)
            DrawControls(control, e.Graphics);
    }
    
    private void DrawControls(Control control,Graphics g)
    {
        var font = new Font("Arial", 10);
        var brush = new SolidBrush(Color.Black);
        var drawFormat = new StringFormat
        {
            FormatFlags = StringFormatFlags.DirectionRightToLeft
        };
    
        if (control is Label)
        {
            if ((string)control.Tag == "1") //Treated with 1 columns of fields.
            {
                g.DrawString(
                    control.Text, font, brush,
                    new Rectangle(control.Location.X - 160, control.Location.Y, control.Size.Width + 10, control.Size.Height),
                    drawFormat);
            }
            if ((string)control.Tag == "2") //Treated with 2 columns of fields.
            {
                g.DrawString(
                    control.Text, font, brush,
                    new Rectangle(control.Location.X - 70, control.Location.Y, control.Size.Width + 10, control.Size.Height),
                    drawFormat);
            }
            if ((string)control.Tag == "3") //Treated with 3 columns of fields.
            {
                g.DrawString(
                    control.Text, font, brush,
                    new Rectangle(control.Location.X, control.Location.Y, control.Size.Width + 10, control.Size.Height));
            }
        }
        else if (control is TextBox || control is ComboBox)
        {
            if ((string)control.Tag == "1") //Treated with 1 columns of fields.
            {
                g.DrawRectangle(
                    new Pen(Color.Black, 1),
                    new Rectangle(control.Location.X - 120, control.Location.Y, control.Size.Width - 40, control.Size.Height));
                g.DrawString(
                    control.Text, font, brush,
                    new Rectangle(control.Location.X - 120, control.Location.Y, control.Size.Width - 40, control.Size.Height), drawFormat);
            }
            if ((string)control.Tag == "2") //Treated with 2 columns of fields.
            {
                g.DrawRectangle(
                    new Pen(Color.Black, 1),
                    new Rectangle(control.Location.X - 30, control.Location.Y, control.Size.Width - 40, control.Size.Height));
                g.DrawString(
                    control.Text, font, brush,
                    new Rectangle(control.Location.X - 30, control.Location.Y, control.Size.Width - 40, control.Size.Height),
                    drawFormat);
            }
            if ((string)control.Tag == "3") //Treated with 3 columns of fields.
            {
                g.DrawRectangle(
                    new Pen(Color.Black, 1),
                    new Rectangle(control.Location.X, control.Location.Y, control.Size.Width, control.Size.Height));
                g.DrawString(
                    control.Text, font, brush,
                    new Rectangle(control.Location.X, control.Location.Y, control.Size.Width, control.Size.Height), drawFormat);
            }
        }
        else if (control is PictureBox && control.Visible)
        {
            var img = ((PictureBox)control).Image;
            var bitmap = new Bitmap(img,new Size(img.Width,img.Height));
            g.DrawImage(
                bitmap,
                new Rectangle(control.Location.X, control.Location.Y, control.Size.Width, control.Size.Height));
        }
        else if (control is DateTimePicker)
        {
            g.DrawString(
                control.Text, font, brush,
                new Rectangle(control.Location.X, control.Location.Y, control.Size.Width + 10, control.Size.Height));
        }
    }
    

    All the printing issues work, but some times printing a PictureBox raises that Exception, so how can I solve this problem?