在C#WPF中打印 - PrintDialog.PrintVisual方法适用于一台计算机,不适用于其他

时间:2015-11-06 19:48:11

标签: c# wpf printing printdialog

我有一个问题,我现在正试图解决大约一个星期,我决定报名并问你,因为我尝试的一切都失败了。

我有用C#编写的WPF应用程序。我最关心的是打印。我有以下代码:

TransformedBitmap tb = new TransformedBitmap();
RotateTransform transform = new RotateTransform(90);

tb.BeginInit();
tb.Source = myBitmapImage;
tb.Transform = transform;
tb.EndInit();

PrintDialog myPrintDialog = new PrintDialog();

var dv = new DrawingVisual();
using (var dc = dv.RenderOpen())
{   
     dc.DrawImage(tb, new Rect(0, 0, myPrintDialog.PrintableAreaWidth, myPrintDialog.PrintableAreaHeight));
}

myPrintDialog.PrintVisual(dv, "Image");

我在几台具有不同Windows版本的计算机上尝试过此代码。在Win 10,Win 8.1,Win 7上工作正常,即使在我的旧Win XP上也是如此。

但是最近我试图用Win 8.1在华硕X553M上运行这个应用程序。应用程序在上面给出的代码后挂起。当然,什么也没有印刷。

我仔细查看了代码,我已经调试了这段代码,并且我发现它已经排好了:

myPrintDialog.PrintVisual(dv, "Image");

文件被发送到打印机,但没有其他事情发生。有趣的是,在打印机的队列文件中,状态为:“缓冲”,并且不会发生变化。我尝试过很少的打印机,包括物理打印机和虚拟打印机 - 同样的事情,永无止境的缓冲...... 另一个奇怪的事情,我测试过打印机,它们似乎正常工作。从打印机驱动程序打印测试页已成功。

这对我来说很奇怪,因为 - 正如我所说 - 代码在其他计算机上运行良好。 在过去的几天里,我在互联网上搜索了答案,我已经在Windows系统中清理并重置了后台打印程序服务。我已经在Asus X553M Win 8上安装了所有可能的更新,我甚至已将其更新到Windows 10.我为新的管理员用户创建了一个新帐户,因为我认为用户配置文件可能已损坏。没有任何改变,仍然没有打印......应用程序仍然挂在那条线上。

我会感激每一条线索,可能出现的问题或我应该在哪里看......我依靠你的建议。我必须使这台笔记本电脑(或我的应用程序)正常工作。更换笔记本电脑不是一种选择,所以你是我最后的希望。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,我可以从一些计算机上打印,但不能从一台计算机打印,在物理打印机上打印(使用XPS正常工作)。我终于得到了一个有效的解决方案:

»https://social.msdn.microsoft.com/Forums/vstudio/en-US/9eb79e11-ee5a-4687-ad4c-a6d96276a8f4/printing-a-wpf-usercontrol?forum=wpf

        UserControlToPrint.Measure(New Size(816, 1056))
        UserControlToPrint.Arrange(New Rect(New Size(816, 1056)))
        UserControlToPrint.UpdateLayout()