实现打印功能的代码

来源:互联网 发布:中国服装存货数据分析 编辑:程序博客网 时间:2024/04/28 01:01

一、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; }
        }

    }


}

 

原创粉丝点击