C# WPF 打印机
- 打印机接口
- 打印文本
- 打印图片
- 打印机属性对话框
- 设置默认打印机
- 搜索打印机
打印机接口
- PrintServer
- PrintQueue
- PrintDocument
打印文本
private void PrintText(string text, int width, int height)
{PrintDocument pd = new PrintDocument();pd.PrintPage += (sender, e) =>{using (Bitmap bitmap = new Bitmap(width, height)){using (Graphics g = Graphics.FromImage(bitmap)){g.FillRectangle(System.Drawing.Brushes.White, 0, 0, width, height);StringFormat format = new StringFormat();format.Alignment = StringAlignment.Center;format.LineAlignment = StringAlignment.Center;g.DrawString(text, new Font("Arial", 12), System.Drawing.Brushes.Black, new RectangleF(0, 0, width, height), format);e.Graphics.DrawImage(bitmap, 0, 0); }} };try{pd.Print();}catch (Exception ex){Console.WriteLine(ex.Message);}
}
打印图片
private void PrintImage(string imagePath, int width, int height){if (File.Exists(imagePath)){PrintDocument pd = new PrintDocument();pd.DefaultPageSettings.Landscape = true;Image image = Image.FromFile(imagePath);pd.PrintPage += (sender, e) =>{using (Bitmap bitmap = new Bitmap(width, height)){using (Graphics g = Graphics.FromImage(bitmap)){g.FillRectangle(System.Drawing.Brushes.Black, 0, 0, width, height);g.DrawImage(image, 0, 0);e.Graphics.DrawImage(bitmap, 0, 0);}}
#if falseImage i = Image.FromFile(imagePath);System.Drawing.Rectangle m = e.MarginBounds;if ((double)i.Width / (double)i.Height > (double)m.Width / (double)m.Height) {m.Height = (int)((double)i.Height / (double)i.Width * (double)m.Width);}else{m.Width = (int)((double)i.Width / (double)i.Height * (double)m.Height);}e.Graphics.DrawImage(i, m);
#endif};try{pd.Print();}catch (Exception ex){Console.WriteLine(ex.Message);}}}
打印机属性对话框
private void btnPrintSettings_Click(object sender, RoutedEventArgs e)
{PrintDialog printDialog = new PrintDialog();if (printDialog.ShowDialog() == true){Console.WriteLine("打印");}
}
设置默认打印机
public static void SetDefaultPrinter(string printerName)
{PrintServer printServer = new PrintServer(); PrintQueue printQueue = new PrintQueue(printServer, printerName); printQueue.Commit();
}
搜索打印机
private void btnPrintSearch_Click(object sender, RoutedEventArgs e)
{PrintServer printServer = new PrintServer();PrintQueueCollection printQueues = printServer.GetPrintQueues();cmboxPrintList.Items.Clear(); foreach (PrintQueue p in printQueues){cmboxPrintList.Items.Add(p.Name);}
}
private void cmboxPrintList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{string pName = cmboxPrintList.SelectedItem as string;Console.WriteLine("选择打印机");if (pName != null){Console.WriteLine("默认打印机:" + pName);SetDefaultPrinter(pName);}
}