日期:2013-03-20  浏览次数:20528 次

能实现如上图的的打印功能。

·所有字体,边距,header 高,行高,都可以自定义。

·支持自动计算每页行数与每页固定行数。

·支持页脚显示页数。



由于自己用和本人比较懒,所以把属性都设置成公有,赋值的时候小心。

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Printing;
using System.Data;

using System.Windows.Forms;

namespace cjManager
{
public class cutePrinter
{
private DataGrid dataGrid;
private PrintDocument printDocument;
private PageSetupDialog pageSetupDialog;
private PrintPreviewDialog printPreviewDialog;

private string title="";

int currentPageIndex=0;
int rowCount=0;
int pageCount=0;

int titleSize=16;
bool isCustomHeader=false;

//Brush alertBrush=new SolidBrush(Color.Red);

string[] header=null;//如果自定义就填入字符串,如果需要斜线分隔,就用\表示,例如:个数#名字 其中#为splitChar
string[] uplineHeader=null;//上行文字数组
int[] upLineHeaderIndex=null;//上行的文字index,如果没有上行就设为-1;
//bool isEveryPagePrintHead=true;//是否每一页都要打印列头。


public bool isEveryPagePrintTitle=false;//是否每一页都要打印标题。
public int headerHeight=50;//标题高度。
public int topMargin=60; //顶边距
public int cellTopMargin=6;//单元格顶边距
public int cellLeftMargin=4;//单元格左边距
public char splitChar='#';//当header要用斜线表示的时候
public string falseStr="×";//如果传进来的dataGrid中有 false,把其转换得字符。
public string trueStr="√";//如果传进来的dataGrid中有 true,把其转换得字符。
public int pageRowCount=7;//每页行数
public int rowGap = 30;//行高
public int colGap = 5;//每列间隔
public int leftMargin = 50;//左边距
public Font titleFont=new Font("Arial",14);//标题字体
public Font font = new Font("Arial", 10);//正文字体
public Font headerFont = new Font("Arial", 9, FontStyle.Bold);//列名标题
public Font footerFont=new Font("Arial",8);//页脚显示页数的字体
public Font upLineFont=new Font("Arial",9, FontStyle.Bold);//当header分两行显示的时候,上行显示的字体。
public Font underLineFont=new Font("Arial",8);//当header分两行显示的时候,下行显示的字体。
public Brush brush = new SolidBrush(Color.Black);//画刷
public bool isAutoPageRowCount=true;//是否自动计算行数。
public int buttomMargin=80;//底边距
public bool needPrintPageIndex=true;//是否打印页脚页数

//string filterStr="";





public cutePrinter(DataGrid dataGrid,string title,int titleSize)
{
this.title=title;
//this.titleSize=titleSize;


this.dataGrid = dataGrid;
printDocument = new PrintDocument();
printDocument.PrintPage += new PrintPageEventHandler(this.printDocument_PrintPage);


}
public cutePrinter(DataGrid dataGrid,string title)
{
this.title=title;


this.dataGrid = dataGrid;
printDocument = new PrintDocument();
printDocument.PrintPage += new PrintPageEventHandler(this.printDocument_PrintPage);
}
public cutePrinter(DataGrid dataGrid)
{
this.dataGrid = dataGrid;
printDocument = new PrintDocument();
printDocument.PrintPage += new PrintPageEventHandler(this.printDocument_PrintPage);
}

public bool setTowLineHeader(string[] upLineHeader,int[] upLineHeaderIndex)
{
this.uplineHeader=upLineHeader;
this.upLineHeaderIndex=upLineHeaderIndex;
this.isCustomHeader=true;
return true;
}
public bool setHeader(string[] header)
{
this.header=header;
return true;

}

private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{

int width=e.PageBounds.Width;
int height=e.PageBounds.Height;

if(this.isAutoPageRowCount)
pageRowCount=(int)((height-this.topMargin-titleSize-this.headerFont.Height-this.headerHei