打印的原理是:生成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(20, 20, 20, 20);
            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, 0, 0, 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, 0, 0, temp.Width, temp.Height);
            g.DrawString(userId, f, b, 168, 105);
            g.DrawString(UserName, f, b, 166, 134);
            g.DrawString(flowId, f, b, 535, 105);
            g.DrawString(currentDate, f, b, 535, 134);
            g.DrawString(baseExpense, f, b, 219, 202);
            g.DrawString(fine, f, b, 372, 202);
            g.DrawString(upExpense, f, b, 486, 202);
            g.DrawString(actualExpense, f, b, 596, 202);
            g.DrawString(chineseExpense, f, b, 196, 238);
            g.DrawString(payDate, f, b, 176, 269);
            g.DrawString(adminName, f, b, 497, 298);

g.Dispose();
        }
        #endregion

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

C#打印图片的更多相关文章

  1. C# 热敏打印机 Socket 网络链接 打印 图片

    C# 热敏打印机 Socket 网络链接 打印 图片 (一) http://www.cnblogs.com/rinack/p/4838211.html C# 热敏打印机 Socket 网络链接 打印 ...

  2. LODOP用ADD_PRINT_IMAGE语句缩放打印图片

    LODOP提高输出图片质量的方法:1.用ADD_PRINT_IMAGE语句打印图片,而且img元素的width和height属性要去掉或者设置足够大,这样就可以让下载引擎传给Lodop图片质量足够好; ...

  3. Python+OpenCV图像处理(二)——打印图片属性、设置图片存储路径、电脑摄像头的调取和显示

    一. 打印图片属性.设置图片存储路径 代码如下: #打印图片的属性.保存图片位置 import cv2 as cv import numpy as np #numpy是一个开源的Python科学计算库 ...

  4. C# 热敏打印机 小票打印机 打印图片

    最近一直在研究并口小票打印机打印图片问题,这也是第一次和硬件打交道,不过还好,最终成功了. 这是DEMO的窗体: 下面是打印所需要调用的代码: 因为我们这里主要是打印条形码和二维码,所以以条形码和二维 ...

  5. C#热敏打印图片 串口打印图片

    原文:C#热敏打印图片 串口打印图片 如图,一步一步慢慢调出来的 //串口通信类 public System.IO.Ports.SerialPort serialPort = null; serial ...

  6. 自定义Chrome的console(样式、打印图片、开关)

    1.常用console类型 console.log() 常规打印 console.warn() 打印警告信息 console.error() 打印错误信息 console.time() 和 conso ...

  7. css技术之用最高和最宽的限制“max-height和max-width”做图片同比例缩放,达到图片不变形目的,做出批量打印图片功能,页面打印“window.print()”

    一.简介 他们是为流而生的,像width/height这种定死的砖头式布局,min-width/max-width就没有存在的意义 ,min-width/max-width一定是自适应布局或流体布局中 ...

  8. DevExpress.chartContro控件保存图片和打印图片

    private void pictureBox1_Click(object sender, EventArgs e) { ////实例化打印对象 PrintDocument print = new P ...

  9. JS 打印图片

    在使用window.print()进行打印时,打印的内容可能会包含图片内容,此时的图片内容不能设置为背景图片,否则将无法再打印页面显示. <!doctype html> <html& ...

随机推荐

  1. Interval Sum I && II

    Given an integer array (index from 0 to n-1, where n is the size of this array), and an query list. ...

  2. phantomhs获取网页的高度

    function heheda() { window.setTimeout(function () { console.log("---------------------Capture O ...

  3. bootstrap fileinput插件使用感悟

    bootstrap fileinput 的填坑感悟              这个插件在demo的网站地址http://plugins.krajee.com/file-preview-icons-de ...

  4. 【LOJ】#2073. 「JSOI2016」扭动的回文串

    题解 就是一个回文串拼上左右两端 类似二分找lcp这么做 可以直接用哈希找回文串 注意要找A串前半部分,B串找后半部分 代码 #include <bits/stdc++.h> #defin ...

  5. Divide by Zero 2018 and Codeforces Round #474 (Div. 1 + Div. 2, combined)

    思路:把边看成点,然后每条边只能从下面的边转移过来,我们将边按照u为第一关键字,w为第二关键字排序,这样就能用线段树维护啦. #include<bits/stdc++.h> #define ...

  6. mybatis的快速入门

    说明: 在这个部分,会写个简单的入门案例. 然后,会重新写一个,更加严格的程序案例. 一:案例一 1.最终的目录结构 2.新建一个普通的Java项目,并新建lib 在项目名上右键,不是src. 3.导 ...

  7. 002 jquery基本选择器

    1.选择器 2.基本选择器 3.程序(包含以上五种基本选择器) <!DOCTYPE html> <html> <head> <meta charset=&qu ...

  8. 000 在什么位置写js代码

    一:介绍 1.DOM 2.节点分类 节点及其类型: 1). 元素节点 2). 属性节点: 元素的属性, 可以直接通过属性的方式来操作. 3). 文本节点: 是元素节点的子节点, 其内容为文本. 二:J ...

  9. 按行拆分文本文件与合并文本文件---I/O流---java

    背景 在进行自然语言处理的中文词性标注时   进行测试时由于测试数据文本行数较多  而且测试每次标注一行的用时稍长 如果一次将文件读进来测试机器运行时间要连续不能中断  而且 只能一台机器进行工作 于 ...

  10. 001.FTP简介及相关文件

    一 FTP简介 FTP(File Transfer Protocol)文件传输协议,用于Internet上控制文件的双向传输. 下载:远程主机拷贝文件至本地: 上传:本地主机拷贝文件至远程. 二 FT ...