(打印机Printer)小票打印

源码路径为
E:\WGY\C#学习\一套开源的企业业务系统框架Winform\586570 31天学会CRM项目开发pdf+源代码\31天学会CRM项目开发-源代码\003 实例及拓展练习\PrintDemo

设计的WMI操作参考https://blog.csdn.net/u011854789/article/details/52792083

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Management;

namespace PrintDemo
{
    public partial class Form1 : Form
    {
        // 引用系统API的SetDefaultPrinter()方法,设置默认打印机
        [DllImport("winspool.drv")]
        public static extern bool SetDefaultPrinter(string Name);

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //设置初始值
            barEditItem3.EditValue = "无";//使用其上一层级的控件EditValue方法
            //指定打印文档
            this.printDialog1.Document = this.printDocument1;
            this.pageSetupDialog1.Document = printDocument1;
            this.printPreviewDialog1.Document = this.printDocument1;
        }
        /// <summary>
        /// 执行打印
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnPrint_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            //设置选定的默认打印机
            SetDefaultPrinter(barEditItem3.EditValue.ToString());
            //执行打印
            this.printDocument1.Print();
        }
        /// <summary>
        /// 页面设置的单击事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnPageSet_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            //页面设置
            //页边距设置
            this.pageSetupDialog1.PageSettings.Margins.Left = 1;
            this.pageSetupDialog1.PageSettings.Margins.Top = 1;
            this.pageSetupDialog1.PageSettings.Margins.Bottom = 1;
            this.pageSetupDialog1.PageSettings.Margins.Right = 1;
            //确定后直接打印
            if (this.pageSetupDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                this.printDocument1.Print();
        }
        /// <summary>
        ///  打印机设置的单击事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnPrinterSet_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            //打印机设置
            //确定后直接打印
            if (this.printDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                this.printDocument1.Print();
        }
        /// <summary>
        /// 打印预览的单击事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnPrintPreview_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.printDocument1.Print();
        }
        /// <summary>
        /// 打印文字
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            //当有多页需要打印时,需要该事件加入e.HasMorePages = true来告诉打印机还有更多页
            //需继续打印。
            //e.HasMorePages = true;

            //设置打印机质量
            e.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            Font drawFont = new Font("Arial",14);
            SolidBrush drawBrush = new SolidBrush(Color.Black);
            float x = 3;float y = 3;
            StringBuilder sb = new StringBuilder();
            sb.Append("青岛**有限公司江山路店\r\n");
            sb.Append("--------------------------\r\n");
            sb.Append("品名    \t单价\t数量\t金额\r\n");
            sb.Append("打火机  \t2.00\t1.00\t2.00\r\n");
            sb.Append("青岛啤酒\t10.00\t30.00\t300.00\r\n");
            sb.Append("瓜子    \t9.00\t2.00\t18.00\r\n");
            sb.Append("橙汁    \t12.00\t1.00\t12.00\r\n");
            sb.Append("合计    \t \t \t332.00\r\n");
            sb.Append("--------------------------\r\n");
            sb.Append(string.Format("打印日期: {0}\r\n 操作员:{1}\r\n\r\n",DateTime.Now.ToString("yyyy-MM-dd HH:mm"),"001"));

#if false
            //打印文字
            e.Graphics.DrawString(sb.ToString(), drawFont, drawBrush, x, y);
#else
            //打印图片
            this.pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
            //创建一个空白图像
            Bitmap b = new Bitmap(400,600);
            //设置pictureBox1的图像
            this.pictureBox1.Image = b;
            Graphics gra = Graphics.FromImage(this.pictureBox1.Image);
            gra.DrawString(sb.ToString(),drawFont,drawBrush,x,y);
            //设置pictureBox1的图像
            this.pictureBox1.Refresh();
            e.Graphics.DrawImage(this.pictureBox1.Image, new Point(3, 3));
#endif
        }
        /// <summary>
        /// 设置默认打印机
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void barButtonItem2_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {          
            //需要引用System.Management命名空间
            //首先遍历全部打印机,使用ManagementObjectSearcher对象
            ManagementScope ms = new ManagementScope(ManagementPath.DefaultPath);
            ms.Connect();
            SelectQuery sq = new SelectQuery();
            sq.QueryString = @"SELECT Name FROM WIN32_Printer";
            ManagementObjectSearcher mos = new ManagementObjectSearcher(ms,sq);
            foreach (ManagementObject mo in mos.Get())
                repositoryItemComboBox1.Items.Add(mo["Name"].ToString());
        }
    }
}

在这里插入图片描述
工具条使用了DevExpress16.2

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值