使用 WPF 打印视觉对象并分配打印机名称

本文关键字:分配 打印机 对象 WPF 打印 视觉 使用 | 更新日期: 2023-09-27 18:34:03

我正在尝试在我的WPF应用程序中打印页面。我决定将其创建为画布,这要归功于 PrintVisual(( 方法的易用性。

问题是我无法动态设置打印机名称 - 使用打印对话框也不是一个选项,员工必须能够单击打印按钮,它会自动打印到他们分配的打印机(通过从配置文件读取分配,而不是基于 Windows 默认打印机(。这可以使用打印页面事件处理程序(PrintDocument 的一部分,例如 pd.PrintPage += new PrintPageEventHandler(pageLayoutForPrint))),因为我也可以设置打印机名称(作为字符串(,但我试图偷懒并利用内置方法。

我对印刷很陌生,但这是我的 2 个问题

  1. 如果我使用 PrintVisual 方法,是否可以设置打印机名称?

  2. 如果无法设置打印机名称,打印画布的最佳方法是什么?打印的理论是有效地映射坐标,然后将其传递给打印机。例如,要仅使用文本框打印文档,我们可以使用以下伪代码:

    int left = textbox.Left;
    int top = textbox.Top;
    e.Graphics.DrawString(Textbox.Text, printFont, Brushes.Black, left, top, new StringFormat());

使用 WPF 打印视觉对象并分配打印机名称

答案嵌入在这里

WPF MVVM 后台打印数据绑定问题

简短的回答:

1( 导入系统打印(可能需要添加引用
(2(这段代码可以做到这一点(假设已经创建了一个画布(!

        PrintDialog dialog = new PrintDialog();
        PrintQueue queue = new LocalPrintServer().GetPrintQueue(printerName);
        dialog.PrintQueue = queue;
        dialog.PrintVisual(canvas, "");

将 PrintDialog 与 PrintVisual(( 一起使用。您不必显示打印对话框。

您可以使用此简单代码轻松完成此操作。我很遗憾地说,你的问题是重复的。

private void Button_Click(object sender, RoutedEventArgs e)
{
    PrintDialog _PrintDialog = new PrintDialog();
    _PrintDialog.PrintQueue = new PrintQueue(new PrintServer(), "Printer Name");
    _PrintDialog.PrintVisual(CanvasOrAnyVisualName, "Printing Job Name");
}