C#打印图片


打印的原理是:生成mdi文件,系统碰到mdi的时候会自动以打印的方式处理。所以,不管用什么模板,什么方式;能在PrintPage事件处理中,生成一张要打印内容的图片就OK了!

C#实现打印源码如下:

#region 打印
         private  void btnPrint_Click( object sender, EventArgs e)
        {
             // 打印预览
            
// PrintPreviewDialog ppd = new PrintPreviewDialog();
            PrintDocument pd =  new PrintDocument();
             // 设置边距
            Margins margin =  new Margins( 20202020);
            pd.DefaultPageSettings.Margins = margin;
             /// /纸张设置默认
             // PaperSize pageSize = new PaperSize("First custom size", 800, 600);
            
// pd.DefaultPageSettings.PaperSize = pageSize;
            
// 打印事件设置
            pd.PrintPage +=  new PrintPageEventHandler( this.pd_PrintPage);
             // ppd.Document = pd;
            
// ppd.ShowDialog();
             try
            {
                pd.Print();
            }
             catch (Exception ex)
            {
                MessageBox.Show(ex.Message,  " 打印出错 ", MessageBoxButtons.OK, MessageBoxIcon.Error);
                pd.PrintController.OnEndPrint(pd,  new PrintEventArgs());
            }
        }
         // 打印事件处理
         private  void pd_PrintPage( object sender, PrintPageEventArgs e)
        {
             string date = lblDate.Text;  // 当前日期
             string flowId = lblFlowId.Text;  // 流水号
             string payDate = PayDate.Year.ToString() +  " " + PayDate.Month.ToString() +  " "// 应收年月
             string adminId = lblAdminId.Text;  // 操作员编号
             string baseExpense = lblBaseExpense.Text;  // 应交基本费用
             string fine = lblFine.Text;  // 罚款数目
             string upExpense = lblUpExpense.Text;  // 上月上余
             string actualExpense = txtActualExpense.Text;  // 实际应交费用
             string chineseExpense = DecimalToChinese.ConvertSum(actualExpense);  // 实际应交费用的中文大写

   
// 读取图片模板
            Image temp = Image.FromFile( @" Receipts.jpg ");
            GetResultIntoImage( ref temp, UserId, flowId, date, baseExpense, fine, upExpense, actualExpense, chineseExpense, payDate, adminId);
             int x = e.MarginBounds.X;
             int y = e.MarginBounds.Y;
             int width = temp.Width;
             int height = temp.Height;
            Rectangle destRect =  new Rectangle(x, y, width, height);
            e.Graphics.DrawImage(temp, destRect,  00, temp.Width, temp.Height, System.Drawing.GraphicsUnit.Pixel);
        }

         ///   <summary>
        
///  将收费结果填充到图片模板
        
///   </summary>
         private  void GetResultIntoImage(
             ref Image temp,
             string userId,
             string flowId,
             string currentDate,
             string baseExpense,
             string fine,
             string upExpense,
             string actualExpense,
             string chineseExpense,
             string payDate,
             string adminName)
        {
             // 读取图片模板
            Graphics g = Graphics.FromImage(temp);

            Font f =  new Font( " 宋体 "12);
            Brush b =  new SolidBrush(Color.Black);
            
    // 填充数据到图片模板(位置要在制作图片模板的时候度量好)
            g.DrawImage(temp,  00, temp.Width, temp.Height);
            g.DrawString(userId, f, b,  168105);
            g.DrawString(UserName, f, b,  166134);
            g.DrawString(flowId, f, b,  535105);
            g.DrawString(currentDate, f, b,  535134);
            g.DrawString(baseExpense, f, b,  219202);
            g.DrawString(fine, f, b,  372202);
            g.DrawString(upExpense, f, b,  486202);
            g.DrawString(actualExpense, f, b,  596202);
            g.DrawString(chineseExpense, f, b,  196238);
            g.DrawString(payDate, f, b,  176269);
            g.DrawString(adminName, f, b,  497298);

            g.Dispose();
        }
         #endregion 

转自:http: // hi.baidu.com/zhaogaoyan8/blog/item/d50fbf9a3f66c0bdc9eaf4c7.html


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM