我正在尝试在我的 WPF 应用程序中打印页面。由于 PrintVisual() 方法的易用性,我决定将其创建为画布。
但问题是我无法动态设置打印机名称 - 使用打印对话框也不是一个选项,工作人员必须能够单击打印按钮并自动打印到他们分配的打印机(通过从配置文件中读取分配,而不是基于 Windows 默认打印机)。这可以使用打印页面事件处理程序(PrintDocument 的一部分,例如pd.PrintPage += new PrintPageEventHandler(pageLayoutForPrint)))
因为我也可以设置打印机名称(作为字符串),但我试图偷懒并利用内置方法。
我对打印很陌生,但这是我的 2 个问题
如果我使用 PrintVisual 方法,可以设置打印机名称吗?
如果无法设置打印机名称,打印画布的最佳方法是什么?是打印有效映射坐标然后将其传递给打印机的理论。例如,要打印只有文本框的文档,我们可以使用以下伪代码:
int left = textbox.Left;
int top = textbox.Top;
e.Graphics.DrawString(Textbox.Text, printFont, Brushes.Black, left, top, new StringFormat());
答案嵌入此处
简短的回答:
1) 导入 System.Printing (可能需要添加引用
2) 这段代码做到了(假设已经创建了一个画布)!
PrintDialog dialog = new PrintDialog();
PrintQueue queue = new LocalPrintServer().GetPrintQueue(printerName);
dialog.PrintQueue = queue;
dialog.PrintVisual(canvas, "");
Run Code Online (Sandbox Code Playgroud)