一、js实现打印功能代码
1、js自带功能实现打印
打印
2、用Object对象s实现打印
width=10>
二、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;
///
/// 实现DataGridView的打印
///
public class PrintDataGridView
{
private static List
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;
///
/// 打印DataGridView控件
///
/// DataGridView控件
/// 是否包括列标题
/// 为 System.Drawing.Printing.PrintDocument.PrintPage 事件提供数据。
/// 起始X坐标
/// 起始Y坐标
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;
}
}
///
/// 将DataGridView控件内容转变到 CellPrintList
///
/// DataGridView控件
/// 是否包括列标题
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)));
///
/// 获取或设置单元格的字体。
///
public System.Drawing.Font Font
{
set { if (null != value) _Font = value; }
get { return _Font; }
}
///
/// 获取为显示进行格式化的单元格的值。
///
public string FormattedValue
{
set { _FormattedValue = value; }
get { return _FormattedValue; }
}
///
/// 获取或设置列的当前宽度 (以像素为单位)。默认值为 100。
///
public int Width
{
set { _Width = value; }
get { return _Width; }
}
///
/// 获取或设置列标题行的高度(以像素为单位)。默认值为 23。
///
public int Height
{
set { _Height = value; }
get { return _Height; }
}
///
/// 获取或设置行号。
///
public int RowIndex
{
set { _RowIndex = value; }
get { return _RowIndex; }
}
///
/// 获取或设置列号。
///
public int ColumnIndex
{
set { _ColumnIndex = value; }
get { return _ColumnIndex; }
}
///
/// 获取或设置前景色。
///
public System.Drawing.Color ForeColor
{
set { _ForeColor = value; }
get { return _ForeColor; }
}
///
/// 获取或设置背景色。
///
public System.Drawing.Color BackColor
{
set { _BackColor = value; }
get { return _BackColor; }
}
}
}