2012-05-11 169 views
0

我想在我的WPF应用程序中打印页面。我决定将它创建为一个画布,这要感谢PrintVisual()方法的轻松。使用WPF打印视觉文件并指定打印机名称

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

我m特印刷,但这里是我的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());

回答

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, ""); 
0

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

+0

对不起,我想我的问题不明确。它必须是特定的打印机,通常不是客户端默认的打印机。 EG,他们的Windows默认打印机是三星A4打印机,但是当他们点击打印时,它需要去做东芝标签打印机。我会更新我的帖子,以确保清楚。 – Dave