我正在寻找一个如何从文件加载图像并使用 WPF 在页面上打印的示例。我很难找到有关 WPF 打印的好信息。
Jon Kruger
问问题
18867 次
4 回答
26
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");
}
于 2008-11-05T13:41:46.117 回答
2
如果您想要更多控制,那么 PrintDialog.PrintVisual 让您必须将图像包装在 FixedDocumet 中。
您可以在此处找到创建固定文档的简单代码: http ://www.ericsink.com/wpf3d/B_Printing.html
于 2008-11-05T14:48:18.353 回答
1
只需加载图像并将其应用于视觉对象。然后使用 PrintDialog 来完成这项工作。
...
PrintDialog printer = new PrintDialog();
if (printer.ShowDialog()) {
printer.PrintVisual(myVisual, "A Page Title");
}
于 2008-11-05T13:26:50.687 回答
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 不会显示正确的高度和宽度。
我知道,这个问题已经很老了,但是在搜索这个问题时很难找到一些有用的信息。
希望我的帖子对其他人有所帮助。
于 2020-08-12T20:50:18.943 回答