2016-06-17 10 views
0

私が試している方法は、2つの重なった画像を生成することです。2つの異なるページに2つのbmpを印刷するには?

私は別々の2つのbmpを印刷するために2つの異なるボタンを作ることができましたが、私は2つのbmpを同じページに印刷する必要があります。

void Imprimir() 
{ 
    PrintDocument pd = new PrintDocument(); 
    pd.DocumentName = "Relatório SisIndice"; 
    pd.PrintPage += new PrintPageEventHandler(doc_PrintPage); 
    pd.DefaultPageSettings.Landscape = true; 
    PrintDialog printDialog1 = new PrintDialog(); 
    printDialog1.Document = pd; 
    DialogResult result = printDialog1.ShowDialog(); 
    if (result == DialogResult.OK) 
    {  
     pd.Print(); 
    } 
} 

private void doc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
{ 
    Bitmap bmp = new Bitmap(pnlPrint.Width, pnlPrint.Height, pnlPrint.CreateGraphics()); 
    pnlPrint.DrawToBitmap(bmp, new Rectangle(0, 0, pnlPrint.Width, pnlPrint.Height)); 
    RectangleF bounds = e.PageSettings.PrintableArea; 
    float factor = ((float)bmp.Height/(float)bmp.Width); 
    e.Graphics.DrawImage(bmp, bounds.Left, bounds.Top, 1118, 855); 
    e.HasMorePages = true; 
    Bitmap bmp1 = new Bitmap(dgvDetGraf.Width, dgvDetGraf.Height, dgvDetGraf.CreateGraphics()); 
    dgvDetGraf.DrawToBitmap(bmp1, new Rectangle(0, 1800, dgvDetGraf.Width, dgvDetGraf.Height)); 
    RectangleF bounds1 = e.PageSettings.PrintableArea; 
    e.Graphics.DrawImage(bmp1, bounds1.Left, bounds1.Top, 894, 684); 
    e.HasMorePages = false; 

} 
+0

エラーは何ですか?そしてどこに –

+0

の画像を互いに印刷するか。 – Leandro

答えて

1

近いうちに、PrintPageイベントが1ページで発生することを逃してしまいました。その場合は、Graphicsオブジェクトのすべてのペイント/描画を行う必要があります。ページがなくなると、HasMorePagesをfalseに設定します。

このようにすべてのビットマップを一度に描画するのではなく、ページ1またはページ2の場合、そのページに必要なビットマップを描画する必要があります。

page変数を含む最も簡単な解決法を選択しました。これは、現在のページを追跡するための変数です。

int page = 0; 

void Imprimir() 
{ 
    // snip irrelevant stuf 
    if (result == DialogResult.OK) 
    { 
     // reset our state to page 1 
     page = 1; 
     pd.Print(); 
    } 
} 

private void doc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
{ 
    // this gets called twice, the page variable 
    // keeps track of what to do (it keeps the State) 
    switch(page) 
    { 
     // do this for page 1 
     case 1: 
      Bitmap bmp = new Bitmap(pnlPrint.Width, pnlPrint.Height, pnlPrint.CreateGraphics()); 
      pnlPrint.DrawToBitmap(bmp, new Rectangle(0, 0, pnlPrint.Width, pnlPrint.Height)); 
      RectangleF bounds = e.PageSettings.PrintableArea; 
      float factor = ((float)bmp.Height/(float)bmp.Width); 
      e.Graphics.DrawImage(bmp, bounds.Left, bounds.Top, 1118, 855); 
      e.HasMorePages = true; 
      break; 
     // do this for page 2 
     case 2: 
      Bitmap bmp1 = new Bitmap(dgvDetGraf.Width, dgvDetGraf.Height, dgvDetGraf.CreateGraphics()); 
      dgvDetGraf.DrawToBitmap(bmp1, new Rectangle(0, 1800, dgvDetGraf.Width, dgvDetGraf.Height)); 
      RectangleF bounds1 = e.PageSettings.PrintableArea; 
      e.Graphics.DrawImage(bmp1, bounds1.Left, bounds1.Top, 894, 684); 
      e.HasMorePages = false; 
      break; 
    } 
    // don't forget to go the next state ... 
    page++; // increase page counter 
} 
+0

ありがとうございます。それは完璧に機能しました!よろしく! – Leandro

関連する問題