2012-05-09 56 views
12

我有一个Silverlight 5 OOB应用程序(具有提升的权限),刚刚部署到我们的许多用户。其中一些用户报告说,打印出来的是空白或非常微弱的。 这些打印机可以正确打印Word文档,我无法在自己的打印机上重现问题。Silverlight 5不在某些打印机上打印

所有用户都在Windows XP SP3 32位,我正在开发Win7 64位。

以前有人看过这个问题吗?或者有什么想法可能导致这种情况?

非常感谢。

非常感谢, 安德鲁

+0

什么是您的报表引擎?有没有第三方Telerik,Devart等关于预览是好的?我们还没有面对,但感谢你的分享。 –

+0

正在打印的页面具有标准控件。我们认为这是打印机驱动程序问题。 –

+1

那么当你打印到XPS打印机或虚拟PDF打印机时如何呢?如果它们没问题,这可能是一个驱动程序问题。 –

回答

1

我应该得到的解决方案可能是有用的给你............................

首先,我创建了一个新的PrintDocument,并为其PrintPage事件连接了一些处理程序。

mobjPrintDocument = New PrintDocument 
RemoveHandler mobjPrintDocument.PrintPage, AddressOf Print_Report 
AddHandler mobjPrintDocument.PrintPage, AddressOf Print_Report 

然后我们可以在打印时调用PrintDocument的PrintBitmap函数。在用户点击打印按钮时,我正在这样做。

Private Sub xbtnPrint_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) 
    mintPageIndex = 0 
    mobjPrintDocument.PrintBitmap(FileName) 
    End Sub 

现在是重要的部分。我们可以通过挂接到PrintPage事件来劫持目标内容(如上所述)。我可以将e.PageVisual设置为任何可视的xaml元素,PrintBitmap将处理它。在这里,我使用GetPages函数并循环以确保打印每个页面(一个pdfviewer元素)。但是,您可以像我说的那样将它指向任何视觉元素。

Private Sub Print_Report(sender As System.Object, e As PrintPageEventArgs) 
    e.PageVisual = xobjReportViewer.GetPages(mintPageIndex) 
    mintPageIndex += 1 
    e.HasMorePages = mintPageIndex < xobjReportViewer.GetPages.Count 
    End Sub 

e.HasMorePages允许您强制触发此事件直到完成。

希望这对某人有帮助。使用Silverlight 5和Post-Script打印机支持,具有PostScript模拟器的许多打印机可能不兼容,但也不会默认为位图打印。此解决方法修复了这一问题,使LOB类型应用程序中的打印更稳定一些。