C# WPF 打印机

C# WPF 打印机

打印机接口

  • PrintServer
  • PrintQueue
  • PrintDocument

打印文本

csharp 复制代码
/// <summary>
/// 打印文本
/// </summary>
/// <param name="text"></param>
/// <param name="width"></param>
/// <param name="height"></param>
private void PrintText(string text, int width, int height)
{
    // 创建一个PrintDocument对象
    PrintDocument pd = new PrintDocument();
    // pd.DefaultPageSettings.Landscape = true;
    // pd.DefaultPageSettings.PrinterSettings.PrinterName = "Gprinter  GP-1134T";  // 指定打印机

    // 设置打印机任务的事件处理
    pd.PrintPage += (sender, e) =>
    {
        // 创建一个Bitmap对象,用于绘制文本                
        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);
    }
}

打印图片

csharp 复制代码
 /// <summary>
 /// 打印图片
 /// </summary>
 /// <param name="imagePath">图片文件路径</param>
 /// <param name="width">打印宽度像素</param>
 /// <param name="height">打印高度像素</param>
 private void PrintImage(string imagePath, int width, int height)
 {
     if (File.Exists(imagePath))
     {
         PrintDocument pd = new PrintDocument();
         pd.DefaultPageSettings.Landscape = true;
         //pd.DefaultPageSettings.PrinterSettings.PrinterName = "Gprinter  GP-1134T";


         Image image = Image.FromFile(imagePath);
         // 设置打印机任务的事件处理
         pd.PrintPage += (sender, e) =>
         {
             // 创建一个Bitmap对象,用于绘制图片
             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 false
             Image i = Image.FromFile(imagePath);
             System.Drawing.Rectangle m = e.MarginBounds;
             if ((double)i.Width / (double)i.Height > (double)m.Width / (double)m.Height) // image is wider
             {
                 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);
         }

     }
 }

打印机属性对话框

csharp 复制代码
private void btnPrintSettings_Click(object sender, RoutedEventArgs e)
{
    // 打印机属性对话框
    PrintDialog printDialog = new PrintDialog();

    if (printDialog.ShowDialog() == true)
    {
        // 用户点击了打印
        Console.WriteLine("打印");
    }            
}

设置默认打印机

csharp 复制代码
/// <summary>
/// 设置默认打印机
/// </summary>
/// <param name="printerName"></param>
public static void SetDefaultPrinter(string printerName)
{
    PrintServer printServer = new PrintServer(); // 默认的打印服务器
    PrintQueue printQueue = new PrintQueue(printServer, printerName); // 根据打印机名称创建打印队列

    // 设置为默认打印机
    printQueue.Commit();
}

搜索打印机

csharp 复制代码
private void btnPrintSearch_Click(object sender, RoutedEventArgs e)
{
    // 获取打印机列表并添加到ComboBox
    PrintServer printServer = new PrintServer();
    PrintQueueCollection printQueues = printServer.GetPrintQueues();

    cmboxPrintList.Items.Clear(); // ComboBox控件
    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);
    }
}
相关推荐
九鼎科技-Leo12 小时前
什么是 WPF 中的依赖属性?有什么作用?
windows·c#·.net·wpf
麻花20131 天前
C#之WPF的C1FlexGrid空间的行加载事件和列事件变更处理动态加载的枚举值
开发语言·c#·wpf
lcintj1 天前
【WPF】Prism学习(九)
学习·wpf·prism
界面开发小八哥1 天前
界面控件DevExpress WPF中文教程:网格视图数据布局的列和卡片字段
wpf·界面控件·devexpress·ui开发·用户界面
△曉風殘月〆1 天前
如何在WPF中嵌入其它程序
wpf
Crazy Struggle1 天前
功能齐全的 WPF 自定义控件资源库(收藏版)
.net·wpf·ui控件库
shepherd枸杞泡茶2 天前
WPF动画
c#·.net·wpf
lcintj2 天前
【WPF】Prism学习(十)
学习·wpf·prism
wyh要好好学习2 天前
WPF数据加载时添加进度条
ui·wpf
code_shenbing2 天前
跨平台WPF框架Avalonia教程 三
前端·microsoft·ui·c#·wpf·跨平台·界面设计