我正在寻找一个如何从文件加载图像并使用WPF将其打印在页面上的示例。我很难找到关于WPF打印的好信息。
答案 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不会显示正确的高度和宽度。
我知道,这个问题已经很老了,但是在搜索时很难找到一些有用的信息。
希望我的帖子对其他人有帮助。