2011-12-09 110 views
1

我已經創建了多個映像到磁盤。我想單擊打印所有按鈕並打印所有打印的圖像。單擊一個按鈕打印多個圖像在winforms中全部打印

public void PrintGraph() 
{ 
    PrintDocument pd = new PrintDocument(); 

    pd.PrintPage += new PrintPageEventHandler(this.PrintImageHandler); 

    PrintDialog MyPrintDialog = new PrintDialog(); 

    if (MyPrintDialog.ShowDialog() == DialogResult.OK) 
    { 
     pd.Print(); 
    } 
    myprintDocument.Dispose(); 
} 

處理程序是如下:

private void PrintImageHandler(object sender, PrintPageEventArgs ppeArgs) 
{ 
    Graphics g = ppeArgs.Graphics; 
    for (int i = 0; i < lstAllImages.Count; i++) 
    { 
     Image objimage = Image.FromFile(lstAllloadImages[i].ToString()); 
     g.DrawImage(objimage, 0, 0, objimage.Width, objimage.Height); 
    } // Draw Image using the DrawImage method 
} 

只有一個圖像打印。 我想打印多個圖像,點擊打印所有按鈕。

回答

2

由於事件args對象的名稱建議(PrintPageEventArgs),因此您要生成的每個都會調用一次該事件處理函數。如果您將HasMorePages屬性設置爲true,則會再次調用新頁面。

在此事件中,您只能控制在單個頁面上顯示的內容,因此您當前的代碼將所有圖像編寫在彼此之上(可能大小相同,或者最大的是最後一個,或者您已經注意到在最後一張圖像的側面或底部顯示的一些早期圖像)。

所以你必須使用外部字段跟蹤你想要繪製的圖像。例如。你必須:

if (MyPrintDialog.ShowDialog() == DialogResult.OK) 
{ 
    currentPage = 0; 
    pd.Print(); 
} 

,然後在事件處理程序:

int currentPage; 

private void PrintImageHandler(object sender, PrintPageEventArgs ppeArgs) 
{ 
    Graphics g = ppeArgs.Graphics; 
    Image objimage = Image.FromFile(lstAllOperatorloadImages[currentPage].ToString()); 
    g.DrawImage(objimage, 0, 0, objimage.Width, objimage.Height); 
    currentPage++; 
    ppeArgs.HasMorePages = currentPage < lstAllOperatorloadImages.Count; 
} 

每頁打印兩張圖片,我可能會做這樣的事情:

private void PrintImageHandler(object sender, PrintPageEventArgs ppeArgs) 
{ 
    Graphics g = ppeArgs.Graphics; 
    Image objimage = Image.FromFile(lstAllOperatorloadImages[currentPage].ToString()); 
    g.DrawImage(objimage, 0, 0, objimage.Width, objimage.Height); 
    currentPage++; 
    if(currentPage < lstAllOperatorloadImages.Count) 
    { 
     objimage = Image.FromFile(lstAllOperatorloadImages[currentPage].ToString()); 
     g.DrawImage(objimage, 0, 600, objimage.Width, objimage.Height); 
     currentPage++; 
    } 
    ppeArgs.HasMorePages = currentPage < lstAllOperatorloadImages.Count; 
} 
+0

有沒有可能每頁打印兩個圖像? – user990897

+0

@ user990897 - 是的,當然,但是你不希望''DrawImage()'他們都在'0,0'位置(否則,你仍然是一個在另一個之上繪製,而最後一個畫出來會「贏」) –

+0

這是正確的嗎?圖形g = ppeArgs.Graphics; Image objimage = Image.FromFile(lstAllImages [currentPage] .ToString()); if(currentPage%2 == 0){g.DrawImage(objimage,0,0,objimage.Width,objimage.Height); } else {g.DrawImage(objimage,0,600,objimage.Width,objimage.Height);當前頁++; } ppeArgs.HasMorePages = currentPage user990897