使用WPF打印可视化并分配printerName

时间:2012-05-11 11:03:01

标签: c# wpf printing

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

问题是我无法动态设置打印机名称 - 使用“打印对话框”也不是一个选项,工作人员必须能够单击打印按钮并自动打印到指定的打印机(通过读取分配)配置文件,不基于Windows默认打印机)。这可以使用print page eventhandler(PrintDocument的一部分,例如pd.PrintPage += new PrintPageEventHandler(pageLayoutForPrint))),因为我也可以设置打印机名称(作为字符串),但我试图变得懒惰并利用内置方法。

我非常打印,但这是我的2个问题

  1. 如果我使用PrintVisual方法可以设置printerName吗?

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

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

3 个答案:

答案 0 :(得分:4)

答案在这里嵌入

WPF MVVM background printing databinding issue

简短的回答:

1)导入System.Printing(可能需要添加引用
2)这段代码做到了(假设已经创建了一个画布)!

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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