2012-08-31 99 views
7

我遇到一个从WPF项目打印奇怪的问题。我正在为报告目的打印应用程序的屏幕截图,并且所有的工作都很好。目前用户按下打印,出现打印对话框,并打印出捕获图像。打印没有ShowDialog给出空白页

但是,我希望能够直接打印到默认打印机而不显示对话框。这应该通过注释ShowDialog()声明轻松完成,并让剩下的事情发生。打印机仍然打印,但页面始终为空。 任何人都可以解释这种行为?

private void PrintCurrentScreen() 
{ 
    PrintDialog PD = new PrintDialog(); 
    PD.PrintTicket.OutputColor = OutputColor.Grayscale; 
    PD.PrintTicket.OutputQuality = OutputQuality.Draft; 

    PrintTicket PT = new PrintTicket(); 
    PT.PageOrientation = PageOrientation.Landscape; 
    PT.CopyCount = 1; 
    PT.PageBorderless = System.Printing.PageBorderless.Borderless; 

    //---Blank pages print when commented out---// 
    //if (PD.ShowDialog() == true) 
    //{ 
    PD.PrintTicket = PT; 

    DrawingVisual DV = new DrawingVisual(); 
    DV.Offset = new Vector(20, 20); 
    DrawingContext DC = DV.RenderOpen(); 
    DC.DrawImage(previewimage.Source, new Rect(new Size(PD.PrintableAreaWidth - 40, PD.PrintableAreaHeight - 40))); 
    DC.Close(); 

    PD.PrintVisual(DV, "TEST"); 
    //} 
} 
+1

你有没有发现这方面的任何解决方案,我有同样的问题,但问题是,这发生在一些具有不同操作系统的PC上 - 并非全部 - – safi

回答

1

尝试做一个措施,安排和UpdateLayout请在printvisual前右,像这样:

DV.Measure(new System.Windows.Size(PD.PrintableAreaWidth, 
       PD.PrintableAreaHeight)); 
DV.Arrange(new System.Windows.Rect(new System.Windows.Point(0, 0), 
       DV.DesiredSize)); 

DV.UpdateLayout(); 
PD.PrintVisual(DV, "TEST"); 
+0

我尝试了这种方法,并且仍然以打印机的空白页面结束。我最终放弃了这个方法,而是用我的xaml元素创建了视觉效果。我将这些新元素放到我的报告中,并且打印得很好。此外还有页面布局的外部控制的额外好处。 –