我有一个WPF应用程序,我需要从中打印。我之前发布过一个关于打印的问题,而不需要显示确认窗口,并得到了一个很好的答案,我已经实现了如下
var pq = LocalPrintServer.GetDefaultPrintQueue();
var writer = PrintQueue.CreateXpsDocumentWriter(pq);
var paginator = newPass.docMain.Document.DocumentPaginator;
writer.Write(paginator);
这段代码很简单 - 它基本上只需要获取本地打印机que并发送XPS文档。但是,打印速度相对较慢。我试图缩小可能性,看起来WinXP和Win7机器之间的速度差异最大。在XP上它很慢但是可以接受,在Win7上打印大约2-3秒时它可以超过10秒15秒并不罕见。这个代码在速度方面会有这么大的差异吗?另外,我注意到这里有一些关于WPF打印速度的问题 - WPF打印一般是否有慢的原因?
答案 0 :(得分:2)
这些链接中的一个或多个可能有助于解决此问题:
http://www.bradymoritz.com/wpf-printing-performance-and-pdf
http://blogs.infosupport.com/blogs/willemm/archive/2008/11/03/WPF-Speed-tips.aspx
WPF: Why TOO SLOW to Get PrintDialog's .PrintableAreaWidth and .PrintableAreaHeight?
答案 1 :(得分:1)
我看到的大多数打印速度问题都与打印机驱动程序有关。打印机驱动程序的任务是将图形指令(在本例中来自WPF)转换为打印机理解的指令,即所谓的PDL(通常是PCL或PostScript)。通常,PDL仅支持图形功能的子集,因此复杂的指令会导致巨大的PDL作业。透明扁平化是臭名昭着的。
答案 2 :(得分:0)
我试图在我自己的开发机器上复制你的问题,这是一台Windows 7(64位)PC。凭借几乎无关紧要的1页FixedDocument
,印刷似乎几乎是即时的(远低于1秒)。打印发生在标准企业网络打印机以及本地PDF编写器(DoPDF)上,两者都表现良好。你身边似乎有些不同,我认为你过早地认为这是一个WPF问题。
为了缩小您的问题范围,我会考虑/尝试以下方法:
int point1 = Environment.TickCount;
相互减去后续点将为您提供点之间经过的时间(以毫秒为单位)。或者查看Stopwatch
类。这些信息应该缩小问题的范围。一般情况下,如果您提供了有关您的具体情况的更多信息,肯定会有所帮助,例如:你在网络或USB打印机上打印?打印文件的大小等等。
答案 3 :(得分:0)
我想到的第一件事是查看Windows 7下的打印机驱动程序是否较慢。 然后我会责怪WPF。 尝试使用其他打印机或打印机驱动程序。