2015-07-21 86 views
0

我有几个带有控件的WPF窗口。我想一个接一个地打印它们而不显示它们。有没有办法做到这一点?WPF打印窗口不显示它

这是印刷方法:

public void printItemList(string printerName) 
    { 
     printButton.Visibility = Visibility.Collapsed; 
     cancelButton.Visibility = Visibility.Collapsed; 
     this.Height = 1250; 
     this.Width = 815; 
     PrintDialog printDlg = new System.Windows.Controls.PrintDialog(); 
     printDlg.PrintQueue = new System.Printing.PrintQueue(new System.Printing.PrintServer(), printerName); 
     System.Printing.PrintCapabilities capabilities = printDlg.PrintQueue.GetPrintCapabilities(printDlg.PrintTicket); 

     //get scale of the print wrt to screen of WPF visual 
     double scale = Math.Min(capabilities.PageImageableArea.ExtentWidth/this.ActualWidth, capabilities.PageImageableArea.ExtentHeight/
         this.ActualHeight); 

     //Transform the Visual to scale 
     this.LayoutTransform = new ScaleTransform(scale, scale); 

     //get the size of the printer page 
     Size sz = new Size(this.ActualWidth, this.ActualHeight); //(8.5 * 96.0, 11.0 * 96.0); 

     //update the layout of the visual to the printer page size. 
     this.Measure(sz); 
     this.Arrange(new Rect(new Point(capabilities.PageImageableArea.OriginWidth, capabilities.PageImageableArea.OriginHeight), sz)); 

     //now print the visual to printer to fit on the one page. 
     printDlg.PrintVisual(this, String.Empty); 
    } 
+0

如同在应用程序运行时创建窗口的图像(png/jpg/etc)一样? –

+0

如何在显示窗口时打印窗口?我想你正在创造一个形象? – user1859022

+0

我刚刚添加了我正在使用的打印方法。 – Steven

回答

0

移动窗外是关键,谢谢你的提示!

ItemListWindow il = new ItemListWindow(); 
il.Show(); 
var desktopWorkingArea = System.Windows.SystemParameters.WorkArea; 
il.Top = desktopWorkingArea.Bottom + 100; 
il.printItemList(printerComboBox.SelectedItem.ToString()); 
il.Close();