2013-01-14 77 views
1

我試圖用下面的代碼打印位圖,但它不起作用。我不知道爲什麼....C#打印圖像不起作用

private void btnImprimir_Click(object sender, EventArgs e) 
    { 
     PrintDocument pd = new PrintDocument(); 
     pd.PrintPage += PrintPage; 
     pd.Print(); 
    } 

    private void PrintPage(object o, PrintPageEventArgs e) 
    { 
     button1.Visible = false; 
     button2.Visible = false; 
     button3.Visible = false; 
     button4.Visible = false; 
     Bitmap bitmap = new Bitmap(this.Width, this.Height); 
     this.DrawToBitmap(bitmap, this.ClientRectangle); 
     Point loc = new Point(this.Width, this.Height); 
     e.Graphics.DrawImage(bitmap, loc); 
     button1.Visible = true; 
     button2.Visible = true; 
     button3.Visible = true; 
     button4.Visible = true; 
    } 
+2

1.你的意思是什麼不起作用? (它不打印,它是否打印空白頁?) 2.您是否嘗試將位圖保存到磁盤並查看它? – Peter

+0

我已經編輯了我的問題並刪除了評論 – Ladessa

+1

好吧,我改變了... – Ladessa

回答

3

用這種方式

Image bmIm; 
private void PrintImage(Image img) 
{ 
    bmIm = img; 
    PrintDocument pd = new PrintDocument(); 
    pd.OriginAtMargins = true; 
    pd.DefaultPageSettings.Landscape = true; 
    pd.PrintPage += pd_PrintPage; 
    pd.Print(); 
} 
void pd_PrintPage(object sender, PrintPageEventArgs e) 
{ 
    double cmToUnits = 100/2.54; 
    e.Graphics.DrawImage(bmIm, 0, 0,(float)(27 * cmToUnits),(float)(18 * cmToUnits)); 
} 
+0

pd.Print(); // error in this line ... null exception – Ladessa

+0

http://www.codeproject.com/Articles/636/Print-Bitmaps-without-Doc-View-Framework –

+1

我想你忘了添加事件連接:'pd .PrintPage + = pd_PrintPage;' – JDB

1

它看起來像沒有連線的情況下正確的(除非我們缺少一些代碼):

pd.PrintPage += this.PrintPage; 

你試圖分配pd_PrintPage這不在你的代碼示例中,所以我不知道它應該做什麼。

+1

函數名稱與OP的原始問題匹配。我相信OP修改了這個問題,試圖與其他答案中的一個相匹配。不知道爲什麼這個答案被接受。最後,OP說這個問題是因爲「這臺計算機上沒有安裝打印機」(請參閱​​http://stackoverflow.com/a/14319870/211627上的評論) – JDB

+0

@ Cyborgx37是的,我沒有看到完整的歷史記錄。謝謝。 –