实现票据套打小程序

我在一个项目中用到了票据的套打,现在把套打部门专门写了个小程序,内容比较简单,仅供大家参考微笑

下面是界面截图:


这个小程序的目的是将文本框的内容打印到票据的不同位置。

1、首先我们需要定义一些打印的参数,包括X坐标偏移、Y坐标偏移、打印字体和打印控件。

        private decimal decX = 0.4m;//修正
        private decimal decY = 0.4m; //修正
        Font printFont = new Font("宋体", 11);//打印字体
        private PrintDocument printdoc;//打印控件
2、然后实现打印按钮

        /// <summary>
        /// 打印
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            this.printdoc = new System.Drawing.Printing.PrintDocument();            
            this.printdoc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printdoc_PrintPage);
            try
            {
                this.printdoc.Print();
            }
            catch (Exception ex)
            {
                MessageBox.Show("打印出错!" + ex.StackTrace, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                printdoc.PrintController.OnEndPrint(printdoc, new PrintEventArgs());
            }
        }
3、定义打印的具体实现

        /// <summary>
        /// 套打--打印到指定位置
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void printdoc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            //将文本框的内容打印到单据的指定位置,具体实践的时候需要慢慢调整位置,很难一次成功
            DrawString(e, this.textBox1.Text, GetPoint(2.8m - decX, 2.0m - decY));
            //打印内容2
            DrawString(e, this.textBox2.Text, GetPoint(5.8m - decX, 4.8m - decY));
        }

4、重写绘图方法

        /// <summary>
        /// 重写绘图方法
        /// </summary>
        /// <param name="e"></param>
        /// <param name="s"></param>
        /// <param name="point"></param>
        private void DrawString(PrintPageEventArgs e, string s, Point point)
        {
            e.Graphics.DrawString(s , printFont, Brushes.Black, GetRect(point));
        }
5、像素变换及绘制文本位置

        /// <summary>
        /// 输入厘米转换成像素
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        private Point GetPoint(Decimal x, Decimal y)
        {
            return new Point((int)(x * 0.3937m * 100), (int)(y * 0.3937m * 100));
        }

        /// <summary>
        /// 绘制文本的位置
        /// </summary>
        /// <param name="point"></param>
        /// <returns></returns>
        private RectangleF GetRect(Point point)
        {
            return new RectangleF(point.X, point.Y, (float)(15 * 0.3937 * 100), printFont.Height + 1);
        }

源码工程下载地址:

http://download.csdn.net/source/3479070





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dragonpeng2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值