2015-02-04 3 views
-1

Я пытаюсь напечатать панель с картинками, надписями и текстовыми полями. Я хочу напечатать его на бумаге формата А4, поэтому панель имеет 595x842. Я пробовал:Пытается напечатать панель в C#

private void print_Click(object sender, EventArgs e) 
{ 
    PrintPanel(panel1); 
} 

private void PrintPanel(Panel pnl) 
{ 
    PrintDialog myPrintDialog = new PrintDialog(); 
    System.Drawing.Bitmap memoryImage = new System.Drawing.Bitmap(pnl.Width, pnl.Height); 
    pnl.DrawToBitmap(memoryImage, pnl.ClientRectangle); 
    if (myPrintDialog.ShowDialog() == DialogResult.OK) 
    { 
     System.Drawing.Printing.PrinterSettings values; 
     values = myPrintDialog.PrinterSettings; 
     myPrintDialog.Document = printDocument1; 
     printDocument1.PrintController = new StandardPrintController(); 
     printDocument1.Print(); 
    } 
    printDocument1.Dispose(); 
} 

Когда я пытаюсь напечатать это я иду к One Note и все, что я получаю белую страницу. В чем проблема?


Я немного изменил код. Теперь я получаю некоторый вывод, но это еще не хорошо ... Это код, который я использовал:

private void print_Click(object sender, EventArgs e) 
{ 
    System.Drawing.Printing.PrintDocument doc = new System.Drawing.Printing.PrintDocument(); 
    doc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(doc_PrintPage); 
    doc.Print(); 
} 
    private void doc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
{ 
    Panel grd = new Panel(); 
    Bitmap bmp = new Bitmap(grd.Width, grd.Height, grd.CreateGraphics()); 
    grd.DrawToBitmap(bmp, new Rectangle(0, 0, grd.Width, grd.Height)); 
    RectangleF bounds = e.PageSettings.PrintableArea; 
    float factor = ((float)bmp.Height/(float)bmp.Width); 
    e.Graphics.DrawImage(bmp, bounds.Left, bounds.Top, bounds.Width, factor * bounds.Width); 
}  

И я получаю это:

http://i.stack.imgur.com/HB1EH.png

Может кто-то помочь?

+1

Вы рисуете панель в 'memoryImage', но тогда вы никогда ее не используете. – Cameron

+0

Итак ... Что мне делать с этим? Извините, но я не опытный>. < – Andrew

+2

Вы не разместили свой обработчик событий для события PrintDocument.PrintPage. Наверное, потому что ты забыл написать это. И да, это ничего не производит, кроме белой страницы. –

ответ

1

Вы печатаете неправильную панель. Ваш код создает новую пустую панель и пытается ее распечатать (что она успешно делает). Вам необходимо обратиться к существующей панели, которую вы хотите распечатать:

void doc_PrintPage(object sender, PrintPageEventArgs e) { 
    using (Bitmap bmp = new Bitmap(panel1.ClientSize.Width, panel1.ClientSize.Height)) { 
    panel1.DrawToBitmap(bmp, panel1.ClientRectangle); 
    RectangleF bounds = e.PageSettings.PrintableArea; 
    float factor = ((float)bmp.Height/(float)bmp.Width); 
    e.Graphics.DrawImage(bmp, bounds.Left, bounds.Top, 
           bounds.Width, factor * bounds.Width); 
    } 
} 
Смежные вопросы