2011-01-26 3 views
4

У меня есть следующий метод, который загружается в пустое изображение шаблона, нарисовывает на нем соответствующую информацию и сохраняет его в другом файле. Я хочу, чтобы изменить это немного, чтобы достичь следующего:Распечатать изображение после его создания [C#]

  • нагрузки в эталонном изображении
  • нарисовать соответствующую информацию на нем
  • печать это

Я не хочу, чтобы сохранить его , просто распечатайте его. Вот мой существующий метод:

public static void GenerateCard(string recipient, string nominee, string reason, out string filename) 
    { 
     // Get a bitmap. 
     Bitmap bmp1 = new Bitmap("template.jpg"); 

     Graphics graphicImage; 

     // Wrapped in a using statement to automatically take care of IDisposable and cleanup 
     using (graphicImage = Graphics.FromImage(bmp1)) 
     { 
      ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg); 

      // Create an Encoder object based on the GUID 
      // for the Quality parameter category. 
      Encoder myEncoder = Encoder.Quality; 

      graphicImage.DrawString(recipient, new Font("Arial", 10, FontStyle.Regular), SystemBrushes.WindowText, new Point(480, 33)); 
      graphicImage.DrawString(WordWrap(reason, 35), new Font("Arial", 10, FontStyle.Regular), SystemBrushes.WindowText, new Point(566, 53)); 
      graphicImage.DrawString(nominee, new Font("Arial", 10, FontStyle.Regular), SystemBrushes.WindowText, new Point(492, 405)); 
      graphicImage.DrawString(DateTime.Now.ToShortDateString(), new Font("Arial", 10, FontStyle.Regular), SystemBrushes.WindowText, new Point(490, 425)); 
      EncoderParameters myEncoderParameters = new EncoderParameters(1); 
      EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 100L); 
      myEncoderParameters.Param[0] = myEncoderParameter; 

      filename = recipient + " - " + DateTime.Now.ToShortDateString().Replace("/", "-") + ".jpg"; 

      bmp1.Save(filename, jgpEncoder, myEncoderParameters); 
     } 
    } 

Надеется, что вы можете помочь, Brett

ответ

7

Просто распечатайте его на принтере без сохранения

Это самый простой пример, который я мог придумать.

Bitmap b = new Bitmap(100, 100); 
using (var g = Graphics.FromImage(b)) 
{ 
    g.DrawString("Hello", this.Font, Brushes.Black, new PointF(0, 0)); 
} 

PrintDocument pd = new PrintDocument(); 
pd.PrintPage += (object printSender, PrintPageEventArgs printE) => 
    { 
     printE.Graphics.DrawImageUnscaled(b, new Point(0, 0)); 
    }; 

PrintDialog dialog = new PrintDialog(); 
dialog.ShowDialog(); 
pd.PrinterSettings = dialog.PrinterSettings; 
pd.Print(); 
3

При использовании класса PrintDocument, вы можете печатать без необходимости, чтобы сохранить изображение.

var pd = new PrintDocument(); 
pd.PrintPage += pd_PrintPage; 

pd.Print() 

И в EventHandler pd_PrintPage:

void pd_PrintPage(object sender, PrintPageEventArgs e) 
{ 
    Graphics gr = e.Graphics; 

    //now you can draw on the gr object you received using some of the code you posted. 
} 

ПРИМЕЧАНИЕ: Не выбрасывайте графического объекта вы получили в EventHandler. Это делается с помощью самого объекта PrintDocument ...

2

Используйте событие PrintPage;

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { 
     e.Graphics.DrawImage(image, 0, 0); 
    } 
Смежные вопросы