Загрузить изображение из файла и распечатать его с помощью WPF... как?
Я ищу пример того, как загрузить изображение из файла и распечатать его на странице с помощью WPF. Мне трудно найти хорошую информацию о печати WPF.
3 ответа
var bi = new BitmapImage();
bi.BeginInit();
bi.CacheOption = BitmapCacheOption.OnLoad;
bi.UriSource = new Uri("");
bi.EndInit();
var vis = new DrawingVisual();
using (var dc = vis.RenderOpen())
{
dc.DrawImage(bi, new Rect { Width = bi.Width, Height = bi.Height });
}
var pdialog = new PrintDialog();
if (pdialog.ShowDialog() == true)
{
pdialog.PrintVisual(vis, "My Image");
}
Если вы хотите больше контроля, тогда PrintDialog.PrintVisual дает вам возможность обернуть ваше изображение в FixedDocumet.
Вы можете найти простой код, который создает фиксированный документ здесь: http://www.ericsink.com/wpf3d/B_Printing.html
Просто загрузите изображение и примените его к визуальному. Затем используйте PrintDialog, чтобы сделать работу.
...
PrintDialog printer = new PrintDialog();
if (printer.ShowDialog()) {
printer.PrintVisual(myVisual, "A Page Title");
}
Играл с этим.
Ответ Тамира - отличный ответ, но проблема в том, что он использует исходный размер изображения.
сам напишу решение, которое не растягивает изображение, если оно меньше размера страницы, и переносит изображение, если оно слишком велико на странице.
Его можно использовать для множественных копий и использовать с обеими ориентациями.
PrintDialog dlg = new PrintDialog();
if (dlg.ShowDialog() == true)
{
BitmapImage bmi = new BitmapImage(new Uri(strPath));
Image img = new Image();
img.Source = bmi;
if (bmi.PixelWidth < dlg.PrintableAreaWidth ||
bmi.PixelHeight < dlg.PrintableAreaHeight)
{
img.Stretch = Stretch.None;
img.Width = bmi.PixelWidth;
img.Height = bmi.PixelHeight;
}
if (dlg.PrintTicket.PageBorderless == PageBorderless.Borderless)
{
img.Margin = new Thickness(0);
}
else
{
img.Margin = new Thickness(48);
}
img.VerticalAlignment = VerticalAlignment.Top;
img.HorizontalAlignment = HorizontalAlignment.Left;
for (int i = 0; i < dlg.PrintTicket.CopyCount; i++)
{
dlg.PrintVisual(img, "Print a Large Image");
}
}
На данный момент он работает только для изображений из файлов с путем, но немного поработав, вы можете его обработать и передать только BitmapImage.
И его можно использовать для печати без полей (если ваш принтер поддерживает это).
Пришлось пойти путем BitmapImage, потому что он загружает размер изображения по умолчанию.
Windows.Controls.Image не показывает правильную высоту и ширину, если вы загружаете изображение прямо туда.
Я знаю, что вопрос очень старый, но во время поиска было очень сложно найти полезную информацию.
Надеюсь, мой пост поможет другим людям.