?? misprinter.cs
字號:
using System;
using System.Drawing;
using System.Drawing.Printing;
namespace GoldPrinter
{
/// <summary>
/// 本程序為通用打印程序,單據、會計憑證、發票清單、報表、任意復雜表格、合并表格如工礦企業合同都可以由系統提供的幾個默
/// 認打印對象組合打印。
/// DataGrid、DataTable、MSHFlexGrid等二維形式全部可以打印。
/// 部分對象如PrinterMargins、Sewing、GridLineFlag、GridMergeFlag等提供圖例,以促進理解。
/// 后期版本將提供XML描述、SQL數據源的打印,并用管理器管理任意多個網格、文本對象、圖象等,用戶可以隨意定義。
///
/// 程序提供:周方勇;Email:flygoldfish@sina.com。
/// 請 關 注:WebMIS.Net快速開發工具,不寫一行程序開發B/S架構下MIS、OA、CRM、人事管理、檔案管理等數據庫網頁系統。簡單、實用、穩定、可靠。
/// 下 載:
/// 上海奧聯:WWW.AlinkSoft.COM
/// 用友華表:WWW.CellSoft.CC
///★★★★★您可以免費使用此程序,但是請您保留此說明,以維護知識產權★★★★★
/// </summary>
public class MisPrinter:IDisposable
{
public Color BackColor = Color.White;//背景顏色
//繪圖表面
private Graphics mGraphics;
//打印文檔
private PrintDocument mPrintDocument;
//下一對象的起點坐標及寬
private float X,Y,Width;
//翻頁用
private int mCurrentPageIndex; //當前頁
private int mCurrentRowIndex; //主數據網格的當前行
private int mCurrentRowIndexForFooter; //Footer當前行
//字段
private int _rowsPerPage; //每頁行數,小于等于0自適應,默認
private bool _isSewingLine; //是否打印裝訂線(默認無)
private bool _isPrinterMargins; //是否打印有效區域矩陣(默認無)
private bool _isSubTotalPerPage; //是否每頁都要顯示主數據網格當前頁小計(默認否)
private string _subTotalCol; //每頁小計要指定的列
private Sewing _sewing; //裝訂,對象的線長小于0則自動設置
private GridBorderFlag _gridBorder; //網格邊框
#region 字段屬性
/// <summary>
/// 每頁行數,小于等于0自適應,默認
/// </summary>
public int RowsPerPage
{
get
{
return _rowsPerPage;
}
set
{
int mint = value;
if (mint < 0)
{
mint = -1;
}
_rowsPerPage = mint;
}
}
/// <summary>
/// 是否打印裝訂線,對象的線長小于0則自動設置
/// </summary>
public bool IsSewingLine
{
get
{
return _isSewingLine;
}
set
{
_isSewingLine = value;
}
}
/// <summary>
/// 是否打印有效區域矩陣
/// </summary>
public bool IsPrinterMargins
{
get
{
return _isPrinterMargins;
}
set
{
_isPrinterMargins = value;
}
}
/// <summary>
/// 是否每頁都要顯示當前頁小計(默認否)
/// </summary>
public bool IsSubTotalPerPage
{
get
{
return _isSubTotalPerPage;
}
set
{
_isSubTotalPerPage = value;
}
}
/// <summary>
/// 用分號分隔的要每頁小計列
/// </summary>
public string SubTotalCol
{
get
{
return _subTotalCol;
}
set
{
_subTotalCol = value;
}
}
/// <summary>
/// 裝訂對象,對象的線長小于0則自動設置
/// </summary>
public Sewing Sewing
{
get
{
return this._sewing;
}
set
{
if (value != null)
{
this._sewing = value;
}
else
{
this._sewing.Margin = 0; //寬度為0則不打印
}
}
}
/// <summary>
/// 網格邊框
/// </summary>
public GridBorderFlag GridBorder
{
get
{
return this._gridBorder;
}
set
{
this._gridBorder = value;
}
}
#endregion
//********************打印對象********************
private Title _title; //主標題
private Caption _caption; //副標題
private Top _top; //簡單的一行三列打印樣式,第一列居左,第三列居右,中間列居中
private Header _header; //正文網格主體之上的幾行幾列的標注說明
private MultiHeader _multiHeader; //正文網格主體標題頭可能需要多層合并表頭說明
private Body _body; //*正文網格主體,必須,打印以此為基準
protected Footer _footer; //正文網格主體之下的幾行幾列的標注說明
private Bottom _bottom; //簡單的一行三列打印樣式,第一列居左,第三列居右,中間列居中
#region 打印對象字段屬性
#region Title、Caption
/// <summary>
/// 獲取或設置打印主標題,可以是文本,也可以是定義更多特性的Title對象
/// </summary>
public object Title
{
get
{
return this._title;
}
set
{
if (value != null)
{
if (value.GetType().ToString() == "System.String")
{
if (this._title == null)
{
this._title = new Title();
}
this._title.Text = (string)value;
}
else if(value.GetType().ToString() == "GoldPrinter.Title")
{
this._title = (GoldPrinter.Title)value;
}
}
}
}
/// <summary>
/// 獲取或設置打印副標題,可以是文本,也可以是定義更多特性的Caption對象
/// </summary>
public object Caption
{
get
{
return this._caption;
}
set
{
if (value != null)
{
if (value.GetType().ToString() == "System.String")
{
if (this._caption == null)
{
this._caption = new Caption();
}
this._caption.Text = (string)value;
}
else if(value.GetType().ToString() == "GoldPrinter.Caption")
{
this._caption = (GoldPrinter.Caption)value;
}
}
}
}
#endregion
#region 或取或設置網格頭、底,可以是以'|'分隔的字符串或或一維數組或具有更多特性的Top/Bottom對象
/// <summary>
/// 或取或設置網格頭,可以是以'|'分隔的字符串或或一維數組或具有更多特性的Top對象
/// </summary>
public object Top
{
get
{
return this._top;
}
set
{
if (value != null)
{
if (value.GetType().ToString() == "System.String" || value.GetType().ToString() == "System.String[]")
{
if (this._top == null)
this._top = new Top();
}
this._top.DataSource = value;
}
else if(value.GetType().ToString() == "GoldPrinter.Top")
{
this._top = (GoldPrinter.Top)value;
}
}
}
}
/// <summary>
/// 或取或設置網格底,可以是以'|'分隔的字符串或或一維數組或具有更多特性的Bottom對象
/// </summary>
public object Bottom
{
get
{
return this._bottom;
}
set
{
if (value != null)
{
if (value.GetType().ToString() == "System.String" || value.GetType().ToString() == "System.String[]")
{
if (this._bottom == null)
{
this._bottom = new Bottom();
}
this._bottom.DataSource = (string)value;
}
else if(value.GetType().ToString() == "GoldPrinter.Bottom")
{
this._bottom = (GoldPrinter.Bottom)value;
}
}
}
}
#endregion
public object Header
get
{
return _header;
}
set
{
this._header = (GoldPrinter.Header)value;
}
}
public object MultiHeader
{
get
{
return _multiHeader;
}
set
{
this._multiHeader = (GoldPrinter.MultiHeader)value;
}
}
public object Body
{
get
{
return _body;
}
set
{
_body = (GoldPrinter.Body)value;
}
}
public object Footer
{
get
{
return this._footer;
}
set
{
this._footer = (GoldPrinter.Footer)value;
}
}
#endregion
//還可以將此程序稍微修改,用一個集體管理,動態加載打印對象,形成任意多個網格的組合體,打印任意復雜的網格
public MisPrinter()
{
mCurrentPageIndex = 1;
_rowsPerPage = 0;
mCurrentRowIndex = 0;
mCurrentRowIndexForFooter = 0;
_isSewingLine = false;
_isPrinterMargins = false;
_isSubTotalPerPage = false;
_subTotalCol = "";
_sewing = new Sewing(0,SewingDirectionFlag.Left);
mPrintDocument = new PrintDocument();
_body = new Body(); //主要對象,所以實例化
_gridBorder = GridBorderFlag.Double;
}
#region IDisposable 成員
public virtual void Dispose()
{
//...
}
#endregion
/// <summary>
/// 頁面設置對話框,如果需要,國慶期間繼續開放,敬請關注
/// </summary>
public void PageSetup()
{
PrinterPageSetting printerPageSetting;
printerPageSetting = new PrinterPageSetting(mPrintDocument);
printerPageSetting.PrintPage += new PrintPageDelegate(this.PrintPageEventHandler);
printerPageSetting.ShowPageSetupDialog();
}
/// <summary>
/// 打印,如果需要,國慶期間繼續開放,敬請關注
/// </summary>
public void Print()
{
PrinterPageSetting printerPageSetting;
printerPageSetting = new PrinterPageSetting(mPrintDocument);
printerPageSetting.PrintPage += new PrintPageDelegate(this.PrintPageEventHandler);
printerPageSetting.ShowPrintSetupDialog();
}
/// <summary>
/// 打印預覽,如果需要,國慶期間繼續開放,敬請關注
/// </summary>
public void Preview()
{
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -