2015-12-20 96 views
1

我想通过将高度和宽度分别设置为29.7厘米和21厘米来将A4尺寸的画布打印出来。使用WPF中的PrintDialog打印画布

我在Windows 7设备上获得正确的输出。但对于Windows 10设备,打印输出与Windows 7设备不同。

真正的问题是高度和宽度不适用于Windows 10设备。

请帮助和建议我!

请找到下面的代码:

的XAML:

<Window x:Class="TestSolution.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     VerticalContentAlignment="Stretch" 
     HorizontalContentAlignment="Stretch" 
     Height="29.7cm" 
     Width="21cm" 
     ResizeMode="NoResize"> 
    <Grid x:Name="grdTest" 
      VerticalAlignment="Stretch" 
       HorizontalAlignment="Stretch" 
      Height="29.7cm" 
       Width="21cm"> 
     <Canvas x:Name="cnvTest" 
       VerticalAlignment="Stretch" 
       Height="29.7cm" 
       Width="21cm" 
       HorizontalAlignment="Stretch"> 
     </Canvas>    
    </Grid>   
</window> 

代码隐藏

private void btn_Click(object sender, RoutedEventArgs e) 
     { 
      PrintDialog prnt = new PrintDialog(); 

      if (prnt.ShowDialog() == true) 
      { 
       prnt.PrintVisual(cnvTest, "Printing Canvas"); 
      } 
      this.Close(); 
     } 

回答

0

你可以试试这个代码

System.Windows.Controls.PrintDialog printDialog = new System.Windows.Controls.PrintDialog(); 
     System.Drawing.Printing.PrinterSettings printer = new System.Drawing.Printing.PrinterSettings(); 
     System.Printing.LocalPrintServer localPrintServer = new System.Printing.LocalPrintServer(); 

     System.Printing.PrintTicket pt = new System.Printing.PrintTicket(); 
     System.Printing.PrintQueue pq = new System.Printing.PrintQueue(localPrintServer, printer.PrinterName, System.Printing.PrintSystemDesiredAccess.AdministratePrinter); 

     System.Printing.PageMediaSize PMS = new System.Printing.PageMediaSize(canvas.ActualWidth + 20, canvas.ActualHeight + 20); 
     System.Windows.Size pageSize = new System.Windows.Size(canvas.ActualWidth+20, canvas.ActualHeight+20); 
     canvas.Arrange(new Rect(0, 0, pageSize.Width, pageSize.Height)); 
     canvas.Measure(pageSize); 




     pt.PageMediaSize = PMS; 
     pt.PageMediaType = System.Printing.PageMediaType.Unknown; 


     pq.DefaultPrintTicket.PageMediaSize = PMS; 
     pq.DefaultPrintTicket.PageMediaType = System.Printing.PageMediaType.Unknown; 



     printDialog.PrintQueue = pq; 
     printDialog.PrintTicket = pt; 
     printDialog.PrintQueue.Commit(); 


     if (printDialog.ShowDialog() == true) 
     { 
      printDialog.PrintVisual(canvas, "Test"); 
     }