2014-04-18 2 views
-2

У меня есть окна формы, но я хочу, чтобы напечатать панели в окнах формы скрытой кнопки печати, и это мой код:Как распечатать панель в виде окон?

private void printDoc_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); 
    } 

    public void StartPrint(Stream streamToPrint, string streamType) 
    { 
     this.printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage); 


     this.streamToPrint = streamToPrint; 
     this.streamType = streamType; 
     System.Windows.Forms.PrintDialog PrintDialog1 = new PrintDialog(); 
     PrintDialog1.AllowSomePages = true; 
     PrintDialog1.ShowHelp = true; 
     PrintDialog1.Document = printDoc; 

     DialogResult result = PrintDialog1.ShowDialog(); 
     if (result == DialogResult.OK) 
     { 
      printDoc.Print(); 
      //docToPrint.Print(); 
     } 

    } 

    private void button_Print_Certificate_Click(object sender, EventArgs e) 
    { 
      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(@"D:\PrintPage.jpg", ImageFormat.Jpeg); 
     FileStream fileStream = new FileStream(@"D:\PrintPage.jpg", FileMode.Open, FileAccess.Read); 
     StartPrint(fileStream, "Image"); 
     fileStream.Close(); 

     if (System.IO.File.Exists(@"D:\PrintPage.jpg")) 
     { 
      System.IO.File.Delete(@"D:\PrintPage.jpg"); 
     } 
    } 
+1

Итак, в чем вопрос? Как связана группа, о которой вы говорили в своем названии? В чем разница между тем, что делает ваш код и что вы хотите? –

+0

Я хочу напечатать панель в моей winform, но этот код напечатать всю форму с помощью кнопки print – user2717468

+0

Попробуйте заменить все вхождения 'this' в' button_Print_Certificate_Click' с помощью объекта панели. –

ответ

0

Для того, чтобы напечатать определенный контроль, вы будете использовать этот контроль в качестве источника вашей операции BitBlt.

Так, а не this.CreateGraphics(), позвоните по телефону panel.CreateGraphics(). Аналогично используйте panel.ClientRectangle, чтобы получить ширину и высоту изображения.

Но посмотрите на https://stackoverflow.com/a/597088/103167, который дает вам более простой способ.

Смежные вопросы