Распечатать изображение после того, как оно было сгенерировано [c #] - PullRequest
4 голосов
/ 26 января 2011

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

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

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

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

Ответы [ 3 ]

7 голосов
/ 26 января 2011

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

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

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 голосов
/ 26 января 2011

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

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

pd.Print()

А в обработчике событий 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.
}

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

2 голосов
/ 26 января 2011

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

   private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) {
      e.Graphics.DrawImage(image, 0, 0);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...