Печать WPF BitmapImage

Какой лучший способ распечатать BitmapImage? Я пришел из системы в System.Drawing, поэтому думал о том, чтобы преобразовать его в растровое изображение и затем распечатать, но я думаю, что, возможно, есть лучший способ.

Спасибо!

2 ответа

Решение

Основываясь на ответе Дрю, лучше всего измерить и расположить контейнер, который передается методу PrintVisual. Это предотвратит обрезание изображения размером более 8,5 x 11 листов. Вот пример того, как я напечатал изображение, которое было частично видимым на экране:

PrintDialog dlg = new PrintDialog();
bool? result = dlg.ShowDialog();

if (result.HasValue && result.Value)
{
    ImageViewer.Measure(new Size(dlg.PrintableAreaWidth, dlg.PrintableAreaHeight));
    ImageViewer.Arrange(new Rect(new Point(0, 0), ImageViewer1.DesiredSize));

    dlg.PrintVisual(ImageViewer, "Print a Large Image");
}

ImageViewer в моем примере может быть заменен любым контейнером UIElement, таким как панель стека, canvas, grid, ect. ImageViewer.Source должен быть установлен в BitmapImage, который готов к печати.

Я получил идею с этой страницы: http://www.switchonthecode.com/tutorials/printing-in-wpf

Проверьте PrintDialog класс Все, что вам нужно сделать, это позвонить в PrintVisual метод, передаваемый вImageкак визуал, который имеет ваш BitmapImage как источник.

Возможно, вы захотите настроить другие параметры печати, но вы обнаружите их при изучении PrintDialog и связанных с ним API.

У нелогичного ответа есть проблема, он всегда растягивает изображение до размера страницы и обрезает некоторый контент при попытке это.


Поэтому я написал собственное решение, которое только растягивает (это правильное слово?), Если изображение слишком велико, может использовать множественные копии и ориентации страниц.

Вот код

Другие вопросы по тегам