从文件加载图像并使用WPF打印...如何?

时间:2008-11-05 12:56:31

标签: wpf printing

我正在寻找一个如何从文件加载图像并使用WPF将其打印在页面上的示例。我很难找到关于WPF打印的好信息。

4 个答案:

答案 0 :(得分:24)

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");
}

答案 1 :(得分:1)

只需加载图片并将其应用于视觉效果。然后使用PrintDialog进行工作。

...
PrintDialog printer = new PrintDialog();

if (printer.ShowDialog()) {
  printer.PrintVisual(myVisual, "A Page Title");
}

答案 2 :(得分:1)

如果你想要更多控制,那么PrintDialog.PrintVisual让你必须将你的图像包装在FixedDocumet中。

您可以在此找到创建固定文档的简单代码: http://www.ericsink.com/wpf3d/B_Printing.html

答案 3 :(得分:1)

正在玩这个游戏。

Tamir的答案是一个很好的答案,但是问题是,它使用的是图像的原始大小。


自己写一个解决方案,如果图像小于页面大小,则小幅图像不会拉伸,如果页面较大,则图像不会变大。
它可以用于多份复印,并且可以在两个方向上使用。

                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不会显示正确的高度和宽度。


我知道,这个问题已经很老了,但是在搜索时很难找到一些有用的信息。
希望我的帖子对其他人有帮助。