public class ReportPrint

{
private System.Windows.Forms.PrintPreviewDialog _PreviewDialog;
private System.Drawing.Printing.PrintDocument _PrintDocument;
private System.Data .DataView _Content;
internal PageSetup _PageSetup=new PageSetup ();
internal Title _Title=new Title ();
internal ReportHeader _ReportHeader=new ReportHeader ();
internal PageHeader _PageHeader=new PageHeader ();
internal PageDetail _PageDetail=new PageDetail ();
internal ReportTailer _ReportTailer=new ReportTailer ();
internal LineFrame _LineFrame=new LineFrame ();
internal ManyColumnsVariable _ManyColumnsVariable=new ManyColumnsVariable ();
private void Transfer(CaptionsContent _Captions)

{
_Title ._TitleText =_Captions._TitleText ;
_ReportHeader ._HeaderText_Left =_Captions._HeaderText_Left ;
_ReportHeader._HeaderText_Center =_Captions._HeaderText_Center ;
_ReportHeader._HeaderText_Right =_Captions._HeaderText_Right ;
_ReportTailer ._TailerText_Left =_Captions._TailerText_Left ;
_ReportTailer._TailerText_Center =_Captions._TailerText_Center ;
_ReportTailer ._TailerText_Right =_Captions._TailerText_Right ;
}
private void PrintTitle(PrintPageEventArgs e)

{
if (Page>=FromPage && Page<=ToPage)

{
PressWork.Print(_Title ._Vertex_X+Offset_X ,_Title ._Vertex_Y+Current_Y ,_Title ._Width ,_Title ._Height ,_Title ._TitleText ,_Title ._Font ,_Title ._Format,e);
}
}
private void PrintReportTailer(PrintPageEventArgs e)

{
if (Page>=FromPage && Page<=ToPage)

{
PressWork.Print (_ReportTailer ._Vertex_X_Left+Offset_X , _ReportTailer ._Vertex_Y_Left+Current_Y , _ReportTailer ._Width_Left, _ReportTailer._Height_Left , _ReportTailer._TailerText_Left ,_ReportTailer._Font_Left ,_ReportTailer._Format_Left ,e);
PressWork.Print (_ReportTailer._Vertex_X_Center+Offset_X ,_ReportTailer._Vertex_Y_Center+Current_Y ,_ReportTailer._Width_Center,_ReportTailer._Height_Center ,_ReportTailer._TailerText_Center ,_ReportTailer._Font_Center ,_ReportTailer._Format_Center ,e);
PressWork.Print (_ReportTailer._Vertex_X_Right+Offset_X , _ReportTailer._Vertex_Y_Right+Current_Y , _ReportTailer._Width_Right ,_ReportTailer._Height_Right , _ReportTailer._TailerText_Right ,_ReportTailer._Font_Right ,_ReportTailer._Format_Right ,e);
}
}
private void PrintPageHeaderText(PrintPageEventArgs e)

{
if (Page>=FromPage && Page<=ToPage)

{
int Temp=_PageHeader._PageHeaderText .Length ;
for (int i=0;i<Temp;i++)

{
PressWork.Print (_PageHeader._Vertex_X [i]+Offset_X,_PageHeader._Vertex_Y [i]+Current_Y,_PageHeader._Width [i],_PageHeader._Height [i],_PageHeader._PageHeaderText [i],_PageHeader._Font [i],_PageHeader._Format [i],e);
}
}
}
private void PrintPageFrame(PrintPageEventArgs e)

{
if (Page>=FromPage && Page<=ToPage)

{
int Temp=_LineFrame._Vertex_X .Length ;
Rectangle[] Panes=new Rectangle [Temp];
for (int i=0;i<Temp;i++)

{
Panes[i]=new Rectangle (_LineFrame._Vertex_X[i]+Offset_X ,_LineFrame._Vertex_Y[i] +Current_Y ,_LineFrame._Width[i] ,_LineFrame._Height[i] );
}
if (Panes.Length >0)

{
PressWork.Print (Panes,e);
}
}
}
private void PrintPageDetail(PrintPageEventArgs e)

{
if (Page>=FromPage && Page<=ToPage)

{
int Temp=_PageDetail._Vertex_X .Length ;
for (int i=0;i<Temp;i++)

{
switch (_PageDetail._PrintDealType[i] )

{
case PrintDealType.Direct :PressWork.Print (_PageDetail._Vertex_X [i]+Offset_X,_PageDetail._Vertex_Y [i]+Current_Y,_PageDetail._Width [i],_PageDetail._Height [i],_Content[CurrentRecord][_PageDetail._FieldName [i]].ToString (),_PageDetail._Font [i],_PageDetail._Format [i],e);break;
case PrintDealType.ThrowoffTailZero :PressWork.Print (_PageDetail._Vertex_X [i]+Offset_X,_PageDetail._Vertex_Y [i]+Current_Y,_PageDetail._Width [i],_PageDetail._Height [i],Function.DecimalThrowoffTailZero (_Content[CurrentRecord][_PageDetail._FieldName [i]].ToString ()),_PageDetail._Font [i],_PageDetail._Format [i],e);break;
case PrintDealType.LitterToUpper :PressWork.Print (_PageDetail._Vertex_X [i]+Offset_X,_PageDetail._Vertex_Y [i]+Current_Y,_PageDetail._Width [i],_PageDetail._Height [i],Function.Litter2Upper(_Content[CurrentRecord][_PageDetail._FieldName [i]].ToString ()),_PageDetail._Font [i],_PageDetail._Format [i],e);break;
case PrintDealType.HideZero :
if (System.Decimal .Parse (_Content[CurrentRecord][_PageDetail._FieldName [i]].ToString ())!=0)

{
PressWork.Print (_PageDetail._Vertex_X [i]+Offset_X,_PageDetail._Vertex_Y [i]+Current_Y,_PageDetail._Width [i],_PageDetail._Height [i],_Content[CurrentRecord][_PageDetail._FieldName [i]].ToString (),_PageDetail._Font [i],_PageDetail._Format [i],e);
}
break;
case PrintDealType.HideOrThrowoffTailZero :
if (System.Decimal .Parse (_Content[CurrentRecord][_PageDetail._FieldName [i]].ToString ())!=0)

{
PressWork.Print (_PageDetail._Vertex_X [i]+Offset_X,_PageDetail._Vertex_Y [i]+Current_Y,_PageDetail._Width [i],_PageDetail._Height [i],Function.DecimalThrowoffTailZero (_Content[CurrentRecord][_PageDetail._FieldName [i]].ToString ()),_PageDetail._Font [i],_PageDetail._Format [i],e);
}
break;
case PrintDealType.Percent:
PressWork.Print (_PageDetail._Vertex_X [i]+Offset_X,_PageDetail._Vertex_Y [i]+Current_Y,_PageDetail._Width [i],_PageDetail._Height [i],Function.PercentTransfer(_Content[CurrentRecord][_PageDetail._FieldName [i]].ToString ()),_PageDetail._Font [i],_PageDetail._Format [i],e);
break;
}
}
}
}
private void PrintReportHeader(PrintPageEventArgs e)

{
if (Page>=FromPage && Page<=ToPage)

{
PressWork.Print (_ReportHeader ._Vertex_X_Left +Offset_X,_ReportHeader ._Vertex_Y_Left+Current_Y ,_ReportHeader ._Width_Left,_ReportHeader._Height_Left ,_ReportHeader._HeaderText_Left ,_ReportHeader._Font_Left ,_ReportHeader._Format_Left ,e);
PressWork.Print (_ReportHeader._Vertex_X_Center+Offset_X ,_ReportHeader._Vertex_Y_Center+Current_Y ,_ReportHeader._Width_Center ,_ReportHeader._Height_Center ,_ReportHeader._HeaderText_Center ,_ReportHeader._Font_Center ,_ReportHeader._Format_Center ,e);
PressWork.Print (_ReportHeader._Vertex_X_Right+Offset_X ,_ReportHeader._Vertex_Y_Right+Current_Y ,_ReportHeader._Width_Right ,_ReportHeader._Height_Right ,_ReportHeader._HeaderText_Right ,_ReportHeader._Font_Right ,_ReportHeader._Format_Right ,e);
}
}
private void PrintDocument(object sender, PrintPageEventArgs e)

{
while(true)

{
PageInitialize();
if (Page==0)

{
ReportInitialize();
Page++;

Title#region Title
if (_Title ._RowHeight>0)

{
PrintTitle(e);
LeavePageHeight-=_Title ._RowHeight ;
Current_Y+=_Title ._RowHeight ;
}
#endregion

ReportHeader#region ReportHeader
if (LeavePageHeight>=_ReportHeader ._RowHeight )

{
if (_ReportHeader._RowHeight>0)

{
PrintReportHeader(e);
LeavePageHeight-=_ReportHeader._RowHeight ;
Current_Y+=_ReportHeader._RowHeight ;
}
}
#endregion

PageHeader and Frame#region PageHeader and Frame
if (LeavePageHeight>=this._LineFrame ._RowHeight )

{
if (_PageHeader._RowHeight >0)

{
PrintPageHeaderText(e);
PrintPageFrame(e);
LeavePageHeight-=_LineFrame ._RowHeight ;
Current_Y+=_LineFrame ._RowHeight ;
}
}
#endregion

Detail and Frame#region Detail and Frame
while (LeavePageHeight>=this._LineFrame ._RowHeight && CurrentRecord<RecordNumber)

{
PrintPageDetail(e);
CurrentRecord++;
PrintPageFrame(e);
LeavePageHeight-=_LineFrame ._RowHeight ;
Current_Y+=_LineFrame ._RowHeight ;
}
#endregion
}
else

{
Page++;
if (LeavePageHeight>=this._LineFrame ._RowHeight )

{
if (_PageHeader._RowHeight >0)

{
PrintPageHeaderText(e);
PrintPageFrame(e);
LeavePageHeight-=_LineFrame ._RowHeight ;
Current_Y+=_LineFrame ._RowHeight ;
}
}
while (LeavePageHeight>=this._LineFrame ._RowHeight && CurrentRecord<RecordNumber)

{
PrintPageDetail(e);
CurrentRecord++;
PrintPageFrame(e);
LeavePageHeight-=_LineFrame ._RowHeight ;
Current_Y+=_LineFrame ._RowHeight ;
}
}

if (CurrentRecord<RecordNumber)

{
e.HasMorePages =true;

}
else

{
if (_ReportTailer._RowHeight >0)

{
PrintReportTailer(e);
}
e.HasMorePages =false;
Page=0;
break;
}
if (Page>=FromPage && Page<=ToPage)

{
if (Page==ToPage) e.HasMorePages =false;
break;
}

}
}
private void PrintDocumentManyColumns(object sender, PrintPageEventArgs e)

{
while(true)

{
PageInitialize();
int 当前列=0;
if (Page==0)

{
ReportInitialize();
Page++;

Title#region Title
if (_Title ._RowHeight>0)

{
PrintTitle(e);
LeavePageHeight-=_Title ._RowHeight ;
Current_Y+=_Title ._RowHeight ;
}
#endregion

ReportHeader#region ReportHeader
if (LeavePageHeight>=_ReportHeader ._RowHeight )

{
if (_ReportHeader._RowHeight>0)

{
PrintReportHeader(e);
LeavePageHeight-=_ReportHeader._RowHeight ;
Current_Y+=_ReportHeader._RowHeight ;
}
}
#endregion
Hold(true);

}
else

{
Page++;
}
//#region PageHeader and Frame
int Current_Y_End=Current_Y;
int LeavePageHeight_End=LeavePageHeight;
int LeavePageHeightTemp=LeavePageHeight;
int Current_YTemp=Current_Y;
for (当前列=0;当前列<_ManyColumnsVariable._HeaderandDetailColumns;当前列++ )

{
Current_Y=Current_YTemp;
LeavePageHeight=LeavePageHeightTemp;
Conversion(当前列);
if (LeavePageHeight>=this._LineFrame ._RowHeight )

{
if (_PageHeader._RowHeight >0)

{
PrintPageHeaderText(e);
PrintPageFrame(e);
LeavePageHeight-=_LineFrame ._RowHeight ;
Current_Y+=_LineFrame ._RowHeight ;
}
}
while (LeavePageHeight>=this._LineFrame ._RowHeight && CurrentRecord<RecordNumber)

{
PrintPageDetail(e);
CurrentRecord++;
PrintPageFrame(e);
LeavePageHeight-=_LineFrame ._RowHeight ;
Current_Y+=_LineFrame ._RowHeight ;
}
if (当前列==0)

{
Current_Y_End=Current_Y;
LeavePageHeight_End=LeavePageHeight;
}
if (CurrentRecord>=RecordNumber) break;
}
Current_Y=Current_Y_End;
LeavePageHeight=LeavePageHeight_End;

if (CurrentRecord<RecordNumber)

{
e.HasMorePages =true;
}
else

{
if (_ReportTailer._RowHeight >0)

{
PrintReportTailer(e);
}
Hold(false);
Page=0;
e.HasMorePages =false;
break;
}
if (Page>=FromPage && Page<=ToPage)

{
if (Page==ToPage)

{
Hold(false);
e.HasMorePages =false;
}
break;
}
}
}
private void Hold(bool 保留)

{

将X值保留或还原#region 将X值保留或还原
int Temp;
if (_ManyColumnsVariable._Vertex_X_PageHeader ==null)

{
Temp=_PageHeader._Vertex_X .Length;
_ManyColumnsVariable._Vertex_X_PageHeader =new int [Temp];
}
if (_ManyColumnsVariable._Vertex_X_PageDetail ==null)

{
Temp=_PageDetail._Vertex_X .Length ;
_ManyColumnsVariable._Vertex_X_PageDetail =new int [Temp];
}
if (_ManyColumnsVariable._Vertex_X_LineFrame==null)

{
Temp=_LineFrame._Vertex_X .Length ;
_ManyColumnsVariable._Vertex_X_LineFrame =new int [Temp];
}
Temp=_PageHeader._Vertex_X .Length;
//_ManyColumnsVariable._Vertex_X_PageHeader =new int [Temp];
for ( int i=0;i<Temp;i++)

{
if (保留)

{
_ManyColumnsVariable._Vertex_X_PageHeader[i] =_PageHeader._Vertex_X[i];
}
else

{
_PageHeader._Vertex_X[i]=_ManyColumnsVariable._Vertex_X_PageHeader[i] ;
}
}
Temp=_PageDetail._Vertex_X .Length ;
//_ManyColumnsVariable._Vertex_X_PageDetail =new int [Temp];
for (int i=0;i<Temp;i++)

{
if (保留)

{
_ManyColumnsVariable._Vertex_X_PageDetail [i]=_PageDetail._Vertex_X [i];
}
else

{
_PageDetail._Vertex_X [i]=_ManyColumnsVariable._Vertex_X_PageDetail [i];
}
}
Temp=_LineFrame._Vertex_X .Length ;
//_ManyColumnsVariable._Vertex_X_LineFrame =new int [Temp];
for (int i=0;i<Temp;i++)

{
if (保留)

{
_ManyColumnsVariable._Vertex_X_LineFrame [i]=_LineFrame._Vertex_X [i];
}
else

{
_LineFrame._Vertex_X [i]=_ManyColumnsVariable._Vertex_X_LineFrame [i];
}
}
#endregion
}
private void Conversion(int Column)

{
int Temp;
Temp=_PageHeader._Vertex_X .Length;
for ( int i=0;i<Temp;i++)

{
_PageHeader._Vertex_X[i]=_ManyColumnsVariable._Vertex_X_PageHeader[i]+Column*_ManyColumnsVariable._Offset_X_Columns ;
}
Temp=_PageDetail._Vertex_X .Length ;
for (int i=0;i<Temp;i++)

{
_PageDetail._Vertex_X [i]=_ManyColumnsVariable._Vertex_X_PageDetail [i]+Column*_ManyColumnsVariable._Offset_X_Columns;
}
Temp=_LineFrame._Vertex_X .Length ;
for (int i=0;i<Temp;i++)

{
_LineFrame._Vertex_X [i]=_ManyColumnsVariable._Vertex_X_LineFrame [i]+Column*_ManyColumnsVariable._Offset_X_Columns;
}
}
private int RecordNumber;
private int CurrentRecord;
private int Page;
private int FromPage;//选择打印页
private int ToPage;//选择打印页
private int AvailablePageHeight;
private int LeavePageHeight;
private int Current_Y;
private int Offset_X;
public ReportPrint()

{
_PrintDocument=new PrintDocument ();
this._PreviewDialog = new System.Windows.Forms.PrintPreviewDialog();
this._PreviewDialog.AutoScrollMargin = new System.Drawing.Size(0, 0);
this._PreviewDialog.AutoScrollMinSize = new System.Drawing.Size(0, 0);
this._PreviewDialog.ClientSize = new System.Drawing.Size(480, 360);
this._PreviewDialog.Enabled = true;
this._PreviewDialog.Location = new System.Drawing.Point(0, 0);
this._PreviewDialog.MaximumSize = new System.Drawing.Size(0, 0);
this._PreviewDialog.Name = "打印预览";
this._PreviewDialog.Opacity = 1;
this._PreviewDialog.TransparencyKey = System.Drawing.Color.Empty;
this._PreviewDialog.Visible = false;
this._PreviewDialog .Document =this._PrintDocument ;
}
private void ReportInitialize()

{
Offset_X=_PageSetup.Margin_Left ;
RecordNumber=_Content.Count ;
Page=0;
CurrentRecord=0;
AvailablePageHeight=_PageSetup .Paper_Height-_PageSetup.Margin_Top -_PageSetup.Margin_Bottom ;
}
private void PageInitialize()

{
LeavePageHeight=AvailablePageHeight;
Current_Y=_PageSetup.Margin_Top ;
}
private void PrintInitialize()

{
if (_PageSetup._PageSettings .PrinterSettings.PrintRange==System.Drawing .Printing .PrintRange .AllPages )

{
ToPage=int.MaxValue ;
FromPage=0;
}
else

{
FromPage=_PageSetup._PageSettings .PrinterSettings .FromPage ;//选择打印页
ToPage=_PageSetup._PageSettings .PrinterSettings .ToPage ;//选择打印页
}
if (_PageSetup._PageSettings .Landscape )

{
_PageSetup.Paper_Width =_PageSetup._PageSettings .PaperSize .Height ;
_PageSetup.Paper_Height =_PageSetup._PageSettings .PaperSize .Width ;
_PageSetup.Margin_Top =_PageSetup._PageSettings .Margins .Top ;
_PageSetup.Margin_Left =_PageSetup._PageSettings .Margins .Left ;
_PageSetup.Margin_Bottom =_PageSetup._PageSettings .Margins .Bottom ;
}
else

{
_PageSetup.Paper_Width =_PageSetup._PageSettings .PaperSize .Width ;
_PageSetup.Paper_Height =_PageSetup._PageSettings .PaperSize .Height ;
_PageSetup.Margin_Top =_PageSetup._PageSettings .Margins .Top ;
_PageSetup.Margin_Left =_PageSetup._PageSettings .Margins .Left ;
_PageSetup.Margin_Bottom =_PageSetup._PageSettings .Margins .Bottom ;
}
}
public void Print(System.Data .DataView _MostContent,CaptionsContent _Captions,bool _PreView,string _TaskName,PageSettings _PageSettings)

{
if (_PageSettings!=null)

{

//设置PageSetup

_PageSetup._PageSettings =_PageSettings;
//设置打印文档
_PrintDocument.PrinterSettings =_PageSettings.PrinterSettings ;
_PrintDocument.DefaultPageSettings =_PageSettings;
PrintInitialize();
//_PrintDocument.PrinterSettings =_PageSetup._PrinterSet ;
}
else

{
throw new System .Exception ("打印设置错误");
}

//string DefaultPrinter=_PrintDocument.PrinterSettings .PrinterName ;//保存缺省打印机
//System.Drawing .Printing .PrinterSettings _DefaultPrinterSet=_PrintDocument.PrinterSettings ;
//_PrintDocument.PrinterSettings .PrinterName =_PageSetup.Printer_Name ;//使用自定打印机
_Content=_MostContent;
Transfer(_Captions);
ReportInitialize();
_PrintDocument.DefaultPageSettings =_PageSetup._PageSettings ;
if (_ManyColumnsVariable._HeaderandDetailColumns >1)

{
this._PrintDocument.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.PrintDocumentManyColumns);
}
else

{
this._PrintDocument.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.PrintDocument);
}
this._PrintDocument .DocumentName =_TaskName;
if (_PreView)

{
this._PreviewDialog .ShowDialog ();
}
else

{
this._PrintDocument .Print ();
}
if (_ManyColumnsVariable._HeaderandDetailColumns >1)

{
this._PrintDocument.PrintPage -= new System.Drawing.Printing.PrintPageEventHandler(this.PrintDocumentManyColumns);
}
else

{
this._PrintDocument.PrintPage -= new System.Drawing.Printing.PrintPageEventHandler(this.PrintDocument);
}
//this._PrintDocument.PrintPage -= new System.Drawing.Printing.PrintPageEventHandler(this.PrintDocument);
//_PrintDocument.PrinterSettings=_DefaultPrinterSet;
//_PrintDocument.PrinterSettings .PrinterName=DefaultPrinter;//恢复缺省打印机
}
}

posted on
2005-04-03 00:07
爱好
阅读(
3424)
评论()
收藏
举报