Я недавно ответил на похожий вопрос, который можно найти здесь: https://stackoverflow.com/a/43373398/3393832. Этот вопрос и ответ больше относятся к магнитному кодированию (на идентификационных картах), чем к печати изображений, но я попытаюсь дать некоторое представление об этом здесь., а также.
Для изображений карт я фактически настроил две таблицы в моем XAML: внешнюю сетку, в которой размещено все (кнопки, метки, поля со списком, внутренняя сетка) и внутреннюю сетку, которая являетсяпо сути, изображение, которое я хочу нанести в полном объеме на саму карту.В коде я делаю «снимок» внутренней сетки после того, как все элементы были добавлены / обновлены, и просто отправляю это изображение в задание на печать.
Для продолжения моего предыдущего поста (ссылка выше) ядобавьте печать изображения ПОСЛЕ шага магнитного кодирования для первой стороны карты (PageCount == 0).
Ниже приведен код, который я использую для получения «снимка» растрового изображения сетки / полного изображения безлюбая потеря четкости / разрешения или любая пикселизация:
RenderTargetBitmap rtb = new RenderTargetBitmap(gridWidth, gridHeight, 210, 210, PixelFormats.Pbgra32);
rtb.Render(YourGrid);
// If you need to Crop Anything Out
CroppedBitmap crop = new CroppedBitmap();
crop = new CroppedBitmap(rtb, new Int32Rect(0, 0, gridWidth, gridHeight));
Bitmap bmpToPrint = BitmapSourceToBitmap(crop);
// Helper Method
public Bitmap BitmapSourceToBitmap(BitmapSource bs)
{
Bitmap bitmap;
using (MemoryStream ms = new MemoryStream())
{
BitmapEncoder enc = new BmpBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create(bs));
enc.Save(ms);
bitmap = new Bitmap(ms);
}
return bitmap;
}
Для магнитного кодирования я использую e.Graphics.DrawString и для изображения (как вы уже догадались) e.Graphics.DrawImage.Просто вызовите DrawString до DrawImage, и ваш драйвер принтера должен выбрать кодирование перед изображением в методе PrintPage (опять же, пожалуйста, обратитесь к ссылке выше для получения более подробной информации о методе Print, который я использую. Этот метод также не привязан кпроизводитель или модель принтера и не зависит от какого-либо SDK).
Несмотря на то, что он универсален и нуждается в подробностях вашей реализации, я надеюсь, что этот пост поможет вам найти решение, соответствующее вашим конкретным потребностям.Пожалуйста, не стесняйтесь спрашивать, есть ли у вас какие-либо дополнительные вопросы или вам нужна более подробная информация о конкретных элементах самого задания на печать.