实现打印功能的代码

    技术2022-05-20  68

    一、js实现打印功能代码

    1、js自带功能实现打印

        <a   href= "javascript:window.print(); "> 打印 </a> 2、用Object对象s实现打印 <OBJECT   classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2   height=10   id="WebBrowser" width=10> </OBJECT>   

       <script   language= "JavaScript "> 

           //获取页面object对象

           var WB =  $("#WebBrowser")       function   doPrintSetup(){            //打印设置             WB.ExecWB(8,1)       }       function   doPrintPreview(){           //打印预览           WB.ExecWB(7,1)       }       function   doprint(){           //直接打印          WB.ExecWB(6,6)      }    </script>

    二、C#打印代码

     

    第一步 基本操作

    定义 一个C#提供的 PrintDocument 对象

    private PrintDocument printDocument;

     

    第二步

    //写一个方法 对打印事件进行初始化

    private void PrintDocument()        {            printDocument = new PrintDocument();            printDocument.PrintPage += new PrintPageEventHandler(printDocument_PrintPage);        }

     

    //

     

    第三步

    事件响应方法

    private void printDocument_PrintPage(object sender, PrintPageEventArgs e)        {            //StringReader lineReader = new StringReader(textBox.Text);            Graphics graphic = e.Graphics;//获取绘图对象            float linesPerPage = 0;//页面行号            float yPosition = 0;//绘制字符串的纵向位置            float leftMargin = e.MarginBounds.Left;//左边距            float topMargin = e.MarginBounds.Top;//上边距            string line = string.Empty;//读取的行字符串            int currentPageLine = 0;//当前页读取的行数            Font charFont = button1.Font;//获取打印字体            SolidBrush brush = new SolidBrush(Color.Black);//刷子            linesPerPage = e.MarginBounds.Height / charFont.GetHeight(graphic);//每页可打印的行数            //countNum记录全局行数,currentPageLine记录当前打印页行数。            // graphic.DrawString("水费通知单", charFont, brush, 360, 100, new StringFormat());

                //房产地址textbox3            //租户名字textbox2            // 上次缴费记录 textbox5            //费用到期 textbox7            //合同开始时间 textbox4            //合同到期时间 textbox6            //月租金 textbox8            //月管理费 textbox9            //缴费租金 textbox11            //缴费管理费 textbox10            //总计   textbox12

                graphic.DrawString("武大教育发展有限公司房屋租金缴费登记", charFont, brush, 300, 100, new StringFormat());            graphic.DrawString("租户:         " + this.textBox2.Text, charFont, brush, 100, 140, new StringFormat());            graphic.DrawString("合同号:       " + this.textBox1.Text, charFont, brush, 100, 180, new StringFormat());            graphic.DrawString("房产地址:     " + this.textBox3.Text, charFont, brush, 100, 220, new StringFormat());            graphic.DrawString("月租金:       " + this.textBox8.Text, charFont, brush, 100, 260, new StringFormat());            graphic.DrawString("月管理费:     " + this.textBox9.Text, charFont, brush, 100, 300, new StringFormat());            graphic.DrawString("上次缴费至:   " + this.textBox7.Text, charFont, brush, 100, 340, new StringFormat());            graphic.DrawString("本次缴费至:   " + this.dateTimePicker1.Text, charFont, brush, 100, 370, new StringFormat());            graphic.DrawString("租金:         " + this.textBox11.Text, charFont, brush, 100, 410, new StringFormat());            graphic.DrawString("管理费:       " + this.textBox10.Text, charFont, brush, 100, 450, new StringFormat());            graphic.DrawString("合计:         " + this.textBox12.Text, charFont, brush, 100, 490, new StringFormat());            graphic.DrawString("备注:", charFont, brush, 100, 530, new StringFormat());            DateTime today = DateTime.Now;            string day = today.Date.ToString();

                graphic.DrawString("武大教育发展有限责任公司 " + day, charFont, brush, 580, 1100, new StringFormat());

            }

     

     

    第四步 调用 打印 和预览打印

     

    this.PrintDocument();                PrintDialog print = new PrintDialog();                //将初始化后的printDocument赋给print.Document                print.Document = printDocument;

    try                {                    if (print.ShowDialog() == DialogResult.OK)                    {                        //打印时直接调用PrintDocument的Print方法                        printDocument.Print();                    }                }                catch (Exception ex)                {                    MessageBox.Show("打印出错:" + ex.ToString());                    //出错则结束打印过程                    printDocument.PrintController.OnEndPrint(printDocument, new PrintEventArgs());                }

     

    打印预览

       PrintPreviewDialog printPreview = new PrintPreviewDialog();            //初始化PrintDocument            this.PrintDocument();            //将初始化后的printDocument赋给print.Document            printPreview.Document = printDocument;            try            {                printPreview.ShowDialog();            }            catch (Exception ex)            {                MessageBox.Show(ex.ToString());            }

     

     

    打印方法实例

     

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Drawing.Printing;using System.IO;

     

    /// <summary>/// 实现DataGridView的打印/// </summary>public class PrintDataGridView{    private static List<DataGridViewCellPrint> CellPrintList = new List<DataGridViewCellPrint>();

        private static int printRowCount = 0;

        private static bool IsPrint = true;    private static bool IsRole = true;    private static int PoXTmp = 0;    private static int PoYTmp = 0;    private static int WidthTmp = 0;    private static int HeightTmp = 0;    private static int RowIndex = 0;

        /// <summary>    /// 打印DataGridView控件    /// </summary>    /// <param name="dataGridView">DataGridView控件</param>    /// <param name="includeColumnText">是否包括列标题</param>    /// <param name="e">为 System.Drawing.Printing.PrintDocument.PrintPage 事件提供数据。</param>    /// <param name="PoX">起始X坐标</param>    /// <param name="PoY">起始Y坐标</param>    public static void Print(DataGridView dataGridView, bool includeColumnText, PrintPageEventArgs e, ref int PoX, ref int PoY, string pageTitle)    {        try        {            if (PrintDataGridView.IsPrint)            {                PrintDataGridView.printRowCount = 0;                PrintDataGridView.IsPrint = false;                PrintDataGridView.DataGridViewCellVsList(dataGridView, includeColumnText);                if (0 == PrintDataGridView.CellPrintList.Count)                    return;                if (PoX > e.MarginBounds.Left)                    PrintDataGridView.IsRole = true;                else                    PrintDataGridView.IsRole = false;                PrintDataGridView.PoXTmp = PoX;                PrintDataGridView.PoYTmp = PoY;                PrintDataGridView.RowIndex = 0;                WidthTmp = 0;                HeightTmp = 0;            }            if (0 != PrintDataGridView.printRowCount)            {                if (IsRole)                {                    PoX = PoXTmp = e.MarginBounds.Left;                    PoY = PoYTmp = e.MarginBounds.Top;                }                else                {                    PoX = PoXTmp;                    PoY = PoYTmp;                }            }            while (PrintDataGridView.printRowCount < PrintDataGridView.CellPrintList.Count)            {                DataGridViewCellPrint CellPrint = CellPrintList[PrintDataGridView.printRowCount];                if (RowIndex == CellPrint.RowIndex)                    PoX = PoX + WidthTmp;                else                {                    PoX = PoXTmp;                    PoY = PoY + HeightTmp;                    if (PoY + HeightTmp > e.MarginBounds.Bottom)                    {                        HeightTmp = 0;                        e.HasMorePages = true;                        return;                    }                }                using (SolidBrush solidBrush = new SolidBrush(CellPrint.BackColor))                {

                        RectangleF rectF1 = new RectangleF(PoX, PoY, CellPrint.Width, CellPrint.Height);                    e.Graphics.FillRectangle(solidBrush, rectF1);                    using (Pen pen = new Pen(Color.Black, 1))                    {

                            e.Graphics.DrawRectangle(pen, Rectangle.Round(rectF1));                    } solidBrush.Color = CellPrint.ForeColor;                    //打印 页面标题                    e.Graphics.DrawString(pageTitle, CellPrint.Font, solidBrush, 300, 80);                    DateTime dt = new DateTime();                                        e.Graphics.DrawString("武大教育发展有限公司 " + dt.Date.ToString(), CellPrint.Font, solidBrush, 400, 1100);                    e.Graphics.DrawString(CellPrint.FormattedValue, CellPrint.Font, solidBrush, new Point(PoX + 2, PoY + 3));                }                WidthTmp = CellPrint.Width;                HeightTmp = CellPrint.Height;                RowIndex = CellPrint.RowIndex;                PrintDataGridView.printRowCount++;            }            PoY = PoY + HeightTmp;            e.HasMorePages = false;            PrintDataGridView.IsPrint = true;        }        catch        {            e.HasMorePages = false;            PrintDataGridView.IsPrint = true;            throw;        }

        }

        /// <summary>    /// 将DataGridView控件内容转变到 CellPrintList    /// </summary>    /// <param name="dataGridView">DataGridView控件</param>    /// <param name="includeColumnText">是否包括列标题</param>    private static void DataGridViewCellVsList(DataGridView dataGridView, bool includeColumnText)    {        CellPrintList.Clear();        try        {            int rowsCount = dataGridView.Rows.Count;            int colsCount = dataGridView.Columns.Count;

                //最后一行是供输入的行时,不用读数据。            if (dataGridView.Rows[rowsCount - 1].IsNewRow)                rowsCount--;            //包括列标题            if (includeColumnText)            {                for (int columnsIndex = 0; columnsIndex < colsCount; columnsIndex++)                {                    if (dataGridView.Columns[columnsIndex].Visible)                    {                        DataGridViewCellPrint CellPrint = new DataGridViewCellPrint();                        CellPrint.FormattedValue = dataGridView.Columns[columnsIndex].HeaderText;                        CellPrint.RowIndex = 0;                        CellPrint.ColumnIndex = columnsIndex;                        CellPrint.Font = dataGridView.Columns[columnsIndex].HeaderCell.Style.Font;                        CellPrint.BackColor = dataGridView.ColumnHeadersDefaultCellStyle.BackColor;                        CellPrint.ForeColor = dataGridView.ColumnHeadersDefaultCellStyle.ForeColor;                        CellPrint.Width = dataGridView.Columns[columnsIndex].Width;                        CellPrint.Height = dataGridView.ColumnHeadersHeight;                        CellPrintList.Add(CellPrint);                    }                }            }            //读取单元格数据            for (int rowIndex = 0; rowIndex < rowsCount; rowIndex++)            {                for (int columnsIndex = 0; columnsIndex < colsCount; columnsIndex++)                {                    if (dataGridView.Columns[columnsIndex].Visible)                    {                        DataGridViewCellPrint CellPrint = new DataGridViewCellPrint();                        CellPrint.FormattedValue = dataGridView.Rows[rowIndex].Cells[columnsIndex].FormattedValue.ToString();                        if (includeColumnText)                            CellPrint.RowIndex = rowIndex + 1;//假如包括列标题则从行号1开始                        else                            CellPrint.RowIndex = rowIndex;                        CellPrint.ColumnIndex = columnsIndex;                        CellPrint.Font = dataGridView.Rows[rowIndex].Cells[columnsIndex].Style.Font;                        System.Drawing.Color TmpColor = System.Drawing.Color.Empty;                        if (System.Drawing.Color.Empty != dataGridView.Rows[rowIndex].Cells[columnsIndex].Style.BackColor)                            TmpColor = dataGridView.Rows[rowIndex].Cells[columnsIndex].Style.BackColor;                        else if (System.Drawing.Color.Empty != dataGridView.Rows[rowIndex].DefaultCellStyle.BackColor)                            TmpColor = dataGridView.Rows[rowIndex].DefaultCellStyle.BackColor;                        else                            TmpColor = dataGridView.DefaultCellStyle.BackColor;                        CellPrint.BackColor = TmpColor;                        TmpColor = System.Drawing.Color.Empty;                        if (System.Drawing.Color.Empty != dataGridView.Rows[rowIndex].Cells[columnsIndex].Style.ForeColor)                            TmpColor = dataGridView.Rows[rowIndex].Cells[columnsIndex].Style.ForeColor;                        else if (System.Drawing.Color.Empty != dataGridView.Rows[rowIndex].DefaultCellStyle.ForeColor)                            TmpColor = dataGridView.Rows[rowIndex].DefaultCellStyle.ForeColor;                        else                            TmpColor = dataGridView.DefaultCellStyle.ForeColor;                        CellPrint.ForeColor = TmpColor;                        CellPrint.Width = dataGridView.Columns[columnsIndex].Width;                        CellPrint.Height = dataGridView.Rows[rowIndex].Height;                        CellPrintList.Add(CellPrint);                    }                }            }        }        catch { throw; }    }

        private class DataGridViewCellPrint    {        private string _FormattedValue = "";        private int _RowIndex = -1;        private int _ColumnIndex = -1;        private System.Drawing.Color _ForeColor = System.Drawing.Color.Black;        private System.Drawing.Color _BackColor = System.Drawing.Color.White;        private int _Width = 100;        private int _Height = 23;        private System.Drawing.Font _Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));        /// <summary>        /// 获取或设置单元格的字体。        /// </summary>        public System.Drawing.Font Font        {            set { if (null != value) _Font = value; }            get { return _Font; }        }        /// <summary>        /// 获取为显示进行格式化的单元格的值。        /// </summary>        public string FormattedValue        {            set { _FormattedValue = value; }            get { return _FormattedValue; }        }        /// <summary>        /// 获取或设置列的当前宽度 (以像素为单位)。默认值为 100。        /// </summary>        public int Width        {            set { _Width = value; }            get { return _Width; }        }        /// <summary>        /// 获取或设置列标题行的高度(以像素为单位)。默认值为 23。        /// </summary>        public int Height        {            set { _Height = value; }            get { return _Height; }        }        /// <summary>        /// 获取或设置行号。        /// </summary>        public int RowIndex        {            set { _RowIndex = value; }            get { return _RowIndex; }        }        /// <summary>        /// 获取或设置列号。        /// </summary>        public int ColumnIndex        {            set { _ColumnIndex = value; }            get { return _ColumnIndex; }        }        /// <summary>        /// 获取或设置前景色。        /// </summary>        public System.Drawing.Color ForeColor        {            set { _ForeColor = value; }            get { return _ForeColor; }        }        /// <summary>        /// 获取或设置背景色。        /// </summary>        public System.Drawing.Color BackColor        {            set { _BackColor = value; }            get { return _BackColor; }        }

        }

    }

     


    最新回复(0)