【问题标题】:Printing Canvas using PrintDialog in WPF在 WPF 中使用 PrintDialog 打印画布
【发布时间】:2015-12-20 15:24:23
【问题描述】:

我正在尝试通过将高度和宽度分别设置为 29.7 厘米和 21 厘米来打印 A4 尺寸的画布。

我在 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();
        }

【问题讨论】:

    标签: c# asp.net wpf


    【解决方案1】:

    终于解决了。礼貌马格努斯(MM8)

    请在下面的链接中找到解决方案

    https://social.msdn.microsoft.com/Forums/en-US/b26c7898-169a-4726-b582-e79dc63f8450/printing-canvas-using-printdialog-in-wpf?forum=wpf

    这是来自网站的答案副本,假设画布名称为 cnvTest:

    private void btn_Click(object sender, RoutedEventArgs e)
    {
        PrintDialog prnt = new PrintDialog();
            if (prnt.ShowDialog() == true)
            {
            Size pageSize = new Size(prnt.PrintableAreaWidth, prnt.PrintableAreaHeight);
            cnvTest.Measure(pageSize);
            cnvTest.Arrange(new Rect(5, 5, pageSize.Width, pageSize.Height));
    
            if (prnt.ShowDialog() == true)
            {
                prnt.PrintVisual(canvas, "Printing Canvas");
            }
        }
        this.Close();
    }
    

    【讨论】:

      【解决方案2】:

      你可以试试这个代码

      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");
              }
      

      【讨论】:

        猜你喜欢
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多