WPF Записать текст в изображение и отправить на принтер - PullRequest
0 голосов
/ 03 февраля 2020

Я хочу создать небольшое изображение, содержащее go и несколько строк текста, и отправить его прямо на принтер. Однако у меня возникли проблемы с качеством текста.

В настоящее время я создаю растровое изображение и выводим на него текст через g.DrawString:

Bitmap bitmap = new Bitmap(240, 240);
Graphics g = Graphics.FromImage(bitmap);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;  // or AntiAlias
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.DrawString("Charge: 1911", new Font("Arial Narrow", 8.0F, System.Drawing.FontStyle.Regular), Brushes.Black, new PointF(6,119));

PrintDocument pd = new PrintDocument();
[...]
pd.PrintPage += PrintPage;
    pd.Print();
g.Dispose();

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

с AntiAliasGridFit:

enter image description here

С AntiAlias:

enter image description here

Это (или лучше) результат, которого я хочу достичь:

enter image description here

Теперь мой вопрос: есть ли способ улучшить качество текста, может быть, использовать TextRenderer вместо Graphics? Это не должно быть растровое изображение, которое я печатаю. Мне просто нужно иметь возможность записать на него уже существующее изображение и затем отправить весь документ на принтер.

1 Ответ

0 голосов
/ 13 февраля 2020

После еще нескольких копаний я нашел решение своей проблемы.
Вместо того, чтобы создавать растровое изображение и рисовать на нем текст, я напрямую рисую текст в объекте PrintPageEventArgs метода PrintPage:

private void PrintPage(object o, PrintPageEventArgs e) {
    e.Graphics.DrawImage(logoImg, xCoordinate, yCoordinate, xSize, ySize);
    e.Graphics.DrawString("Charge: 19011", textFont, Brushes.Black, 0, 0, new StringFormat());
}

Я не уверен на 100%, почему это работает, но теперь у меня совершенно четкий текст, как с векторной графикой.

Пример

...