2012-05-25 4 views
3

제 응용 프로그램에는 패널 안에 둘러싸인 차트가 있습니다. 도구 상자에서 printdocument 구성 요소를 추가하고 차트를 인쇄 할 때 비트 맵을 만들고 비트 맵 내부에 패널을 가져옵니다 (결과적으로 패널 내부의 차트). 내 문제는 비트 맵을 만들 때 인쇄 할 때 프린터로 보낼 때 차트의 아래쪽과 오른쪽에서 약간의 차트를 먹는 것입니다. 아래 코드는 이것을 실행하는 코드입니다비트 맵을 인쇄 할 때 일부 비트가 먹 힙니다.

private void button1_Click(object sender, EventArgs e) 
    { 
     PrintDialog printDialog = new PrintDialog(); 
     printDialog.Document = printDocument1; 
     printDialog.UseEXDialog = true; 
     //Get the document 

     if (DialogResult.OK == printDialog.ShowDialog()) 
     { 
      printDocument1.DocumentName = "Test Page Print"; 
      printPreviewDialog1.Document = printDocument1; 

      if (DialogResult.OK == printPreviewDialog1.ShowDialog()) 
      printDocument1.Print(); 
     } 
    } 

print_document를 초기화하는 버튼입니다. (나는 그것을마다 시간을 인쇄 할 필요가 없도록 인쇄 미리보기를 추가하고 종이와 잉크를 소비)

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
    { 
     Bitmap bm = new Bitmap(this.panel1.Width, this.panel1.Height); 
     this.panel1.DrawToBitmap(bm, new Rectangle(50, 50, this.panel1.Width + 50, this.panel1.Height + 50)); 
     e.Graphics.DrawImage(bm, 0, 0); 
    } 

나는 어쩌면 차트가 너무 큰 것을 생각하고이 페이지에 맞지 않는 하지만 만약 내가 비트 맵을 저장합니다. 실제로 페이지 안쪽에 맞습니다. 하단과 우측에 너무 많은 여유 공간이 있습니다. (비트 맵 함수에 무승부 대신 무승부 이미지의

bm.Save(@"c:\LOAN_GRAPH.png"); 

을 추가하고 이미지가 C에 저장 : 내가 진정으로 감사 할 것 나를 도울 수

누구를 후.

+0

그래서 생성 된 비트 맵을 디스크에 저장할 때 멋지게 보이면 이미지를 프린터로 전송 해 보셨습니까? 나에게 그것은 이미지가 뭔가에 맞게 조정되는 인쇄 프로세스와 비슷하게 들리며 이미지의 나머지 부분을 잘라내는 것 같다. – cDecker32

+0

이 과부하를 시도하면 어떻게됩니까? e.Graphics.DrawImage (bm, 새로운 Rectangle (Point.Empty, bm.Size), 새로운 Rectangle (Point.Empty, bm.Size), GraphicsUnit.Pixel); –

+0

그것의 작동. 패널을 제거하고 대신 차트에 따라 직사각형을 만듭니다. 비트 맵 bm = 새 비트 맵 (this.chart1.Width, this.chart1.Height); this.chart1.DrawToBitmap (bm, 새 사각형 (50, 50, this.chart1.Width + 50, this.chart1.Height + 50)); e.Graphics.DrawImage (bm, 0, 0); 과 같은 매력이 작용합니다. –

답변

1

작동합니다. 패널을 제거하고 대신 차트에 따라 직사각형을 만듭니다.

Bitmap bm = new Bitmap(this.chart1.Width, this.chart1.Height); 
    this.chart1.DrawToBitmap(bm, new Rectangle(50, 50, this.chart1.Width + 50, this.chart1.Height + 50)); 
    e.Graphics.DrawImage(bm, 0, 0);